【问题标题】:How to use ap_parse_form_data and keep request body?如何使用 ap_parse_form_data 并保留请求正文?
【发布时间】:2014-08-01 01:08:29
【问题描述】:
我正在为 apache 开发一个模块,该模块在将请求传递到后端之前执行一些身份验证。有时,某些身份验证需要解析表单数据。问题是 ap_parse_form_data 似乎耗尽了请求正文,因此当它通过我的模块并到达将其汇集到后端的 ProxyPass 指令时,请求正文消失了,后端认为有没有提供表单数据。
有什么方法可以使用ap_parse_form_data 以保持请求正文完整吗?
【问题讨论】:
标签:
c
apache
apache-modules
【解决方案1】:
为了记录,我最终没有弄清楚如何让ap_parse_form_data 不丢弃请求正文。通过手动添加请求正文,我能够达到相同的效果:
apr_bucket_brigade *new_brigade = apr_brigade_create(req->pool, req->connection->bucket_alloc);
apr_bucket *bucket = apr_bucket_transient_create(reencoded_form_data,
strlen(reencoded_form_data), req->connection->bucket_alloc);
APR_BRIGADE_INSERT_TAIL(new_brigade, bucket);
req->kept_body = new_brigade;
这并不理想,因为如果在实际上不包含表单数据的请求正文上调用 ap_parse_form_data,它不会处理丢弃请求正文的副作用。但它足以满足我的目的......