【问题标题】:Apache C module how to send response to clientApache C模块如何向客户端发送响应
【发布时间】:2013-05-21 15:42:48
【问题描述】:

我编写了一个 Apache 模块来处理从客户端接收文件。我现在想将响应发送回客户端。我希望响应包含一个字符串,该字符串表示发送到模块的文件的文件路径。由于我是编写 Apache 模块的新手,因此我不确定是否需要使用某种类型的响应结构,或者我需要的所有内容是否都在传递给我的处理程序的 request_rec 中。我注意到 ap_rprintf 向客户端发送数据。我应该用那个吗?如果是这样,它是如何发回给客户端的(即我的客户端如何从发回给它的东西中提取字符串)?

谢谢!

编辑: 我只是偶然发现了 apr_socket_send() 但我不知道这在这种情况下是否有效。 request_rec 存储连接,所以我可以创建一个到客户端的套接字并以这种方式发送数据吗?

【问题讨论】:

  • 您正在阅读哪本手册?你试过什么?你的测试用例在哪里?它出了什么问题?

标签: c http apache2 apache-modules


【解决方案1】:

您查看过mod_example 的源代码吗?

基本上:

r->content_type = "text/html";
ap_send_http_header(r);
ap_rputs(DOCTYPE_HTML_3_2, r);
ap_rputs("<HTML>\n", r);
...
ap_rprintf(r, "Stuff that you want to send in the body");
...

【讨论】:

  • ap_rprintf 如何将数据发回给客户端?它是否附加到响应标头?
  • 上面的第二行发送响应头。然后 ap_rprintf 就像 printf 一样——它只是写入连接到客户端的流。
  • 好的。所以当我将数据写入流时,我的客户端应该能够从它建立的连接中提取它?
  • 是否需要发送响应头才能使用 ap_rprintf?
  • 您的客户端不是网络浏览器吗?无论如何,是的,客户端只看到标题和其他所有内容都在同一个套接字上。如果要使用 HTTP,则需要先发送响应标头。
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
相关资源
最近更新 更多