我一直在努力创建一个用C语言编写的自定义过滤模块,它可以处理发布消息。读取json有效负载,决定是代理消息还是将204返回给客户端。
我在阅读消息的有效负载时遇到问题,我已阅读了相当多的模块,但遗漏了一些内容。我已经尝试了很多方法来解析有效负载,但似乎无法弄清楚如何只是简单地打印它。
我已经阅读了echo模块,redis模块,Evan Miller的文档等等。
我知道在处理有效负载之前我需要阅读完整的消息,但回调让我感到困惑。我真的不理解ngx_http_read_client_request_body中的回调。我试过阅读代码,但代码中几乎没有文档。
在下面的代码中,我尝试了多个东西来获取请求体,我尝试读取r-> request_body-> buf,bufs,读取完整体后。当我尝试打印请求主体时,我得到了段错误。我认为echo模块最接近我想要做的但是我在ngx_http_echo_wev_handler中对它如何处理请求感到困惑。
static ngx_int_t ngx_http_ortb_handler(ngx_http_request_t *r) {
ngx_int_t rc;
ngx_flag_t read_body;
if (r->method != NGX_HTTP_POST) {
read_body = 1;
}
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Received Post");
if (read_body) {
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
return rc;
}
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "return code %ld", rc);
// What do I need to do here to read the body.
} else {
r->main->count++;
rc = ngx_http_discard_request_body(r);
if (rc != NGX_OK) {
return rc;
}
ngx_http_upstream_init(r);
}
return NGX_DECLINED;
}