Welcome! Log In Create A New Profile

Advanced

считать POST реквест в буффер

December 11, 2010 11:41AM
Здравствуйте,

подскажите пожалуйскта как правильно считать пост реквест в буффер.
Я нашел модуль 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?

Или может есть где-нибудь красивый пример где можно полностью прочитать запрос от браузера?

Спасибо,
Максим.
Subject Author Posted

считать POST реквест в буффер

magz December 11, 2010 11:41AM

Re: считать POST реквест в буффер

Valery Kholodkov December 11, 2010 04:50PM

Re: считать POST реквест в буффер

magz December 11, 2010 05:55PM

Re: считать POST реквест в буффер

Valery Kholodkov December 11, 2010 06:20PM

Re: считать POST реквест в буффер

magz December 11, 2010 07:49PM

Re: считать POST реквест в буффер

Maxim Dounin December 11, 2010 06:36PM

Re: считать POST реквест в буффер

magz December 11, 2010 08:33PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 87
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready