считать POST реквест в буффер
magz
nginx-forum на nginx.us
Сб Дек 11 19:41:16 MSK 2010
Здравствуйте,
подскажите пожалуйскта как правильно
считать пост реквест в буффер.
Я нашел модуль form_input там через функции
NDK делается регистрируется handler так:
value = cf->args->elts;
filter.func = ngx_http_set_form_input;
return ndk_set_var_multi_value_core (cf, value, &s, &filter)
Далее делается вот так:
cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
h =
ngx_array_push(&cmcf->phases[NGX_HTTP_SERVER_REWRITE_PHASE].handlers);
*h = ngx_http_form_input_handler;
h = ngx_array_push(&cmcf->phases[NGX_HTTP_REWRITE_PHASE].handlers);
*h = ngx_http_form_input_handler;
После этого крутимся внутри
ngx_http_form_input_handler() c ngx_http_read_client_request_body()
возвращая NGX_AGAIN и если читался весь POST
то возвращаем NGX_DECLINED. ( Необходимо
склеить пост в 1 буффер, если он был
передан от браузера в несколько
пакетов).
Далее вызывается обрабочик который мы
заререгистрировали выше ngx_http_set_form_input()
в котором читаем запрос:
Размер:
len = 0;
for (cl = r->request_body->bufs; cl != NULL; cl = cl->next) {
len += cl->buf->last - cl->buf->pos;
}
Сам буфер:
p = buf;
for (cl = r->request_body->bufs; cl; cl = cl->next) {
p = ngx_copy(p, cl->buf->pos, cl->buf->last - cl->buf->pos);
p += cl->buf->last - cl->buf->pos;
}
Теперь у меня возникает проблемма как
это сделать правильно. Как правильно
зарегистривовать обработчик
ngx_http_set_form_input()? Я посмотрел на другие
модули. Они используют так называемые
фильтры:
ngx_http_next_body_filter = ngx_http_top_body_filter;
ngx_http_top_body_filter = ngx_http_my_module_body_filter;
Я попробовал так сделать, но в
ngx_http_my_module_body_filter() получаю r->request_body ==
NULL. Соответственно никаких буферов не
видно.
Как бы переписать:
value = cf->args->elts;
filter.func = ngx_http_set_form_input;
return ndk_set_var_multi_value_core (cf, value, &s, &filter)
что-бы обработчик вызывался без NDK?
Или может есть где-нибудь красивый
пример где можно полностью прочитать
запрос от браузера?
Спасибо,
Максим.
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,157784,157784#msg-157784
Подробная информация о списке рассылки nginx-ru