Apache模块 - 获取请求正文

时间:2015-05-02 22:16:23

标签: c++ linux apache

我正在创建简单的apache模块来捕获所有HTTP流量,以便安全软件进行实时处理。我的目标是从请求和响应中获取标题和正文。到目前为止,除了请求正文外,我设法得到了所有我需要在输出过滤器中获取请求主体的最佳方法是什么,或者在任何其他钩子/处理程序中获取请求响应"元组"所有相关信息?

{{1}}

任何有用的帮助

1 个答案:

答案 0 :(得分:0)

您可以从ap_filter_t指针变量派生的request_rec指针中读取正文。

  1. 第一步,应通过调用 ap_setup_client_block 并传递request_rec指针和“读取策略”作为参数,告诉apache您要从客户端读取数据。
  2. 其次,您调用 ap_should_client_block (将request_rec指针作为参数传递)来检查一切正常,尤其是在客户端(期望结果为 true )。
  3. li>
  4. 然后调用(根据需要多次) ap_get_client_block ,并以request_rec作为参数,将要存储数据的缓冲区以及缓冲区的大小。作为响应,您应该获取读取的字节数,并且数据应该在缓冲区中。如果您尝试读取最多X个字节并返回了X个字节,则应再次调用以获取剩余的字节。请注意,应使用标题“ Content-length”来避免尝试读取太多数据,这可能会导致崩溃...

因此,您将遵循以下原则:

char buffer[SOME_BUFER_SIZE];
int ret_code = ap_setup_client_block(r, REQUEST_CHUNKED_ERROR);
if (ret_code == OK) {
    if (ap_should_client_block(r)) {
        int dataBytesRead = ap_get_client_block(r, buffer, SOME_BUFFER_SIZE);
        ...
    }
}

撰写本文时,您可以在以下位置找到更多信息:https://docstore.mik.ua/orelly/apache_mod/139.htm或此处:http://byteandbits.blogspot.com/2013/09/example-apache-module-for-reading.html

希望有帮助...