Re: считать POST реквест в буффер
Maxim Dounin
mdounin на mdounin.ru
Вс Дек 12 02:34:10 MSK 2010
Hello!
On Sat, Dec 11, 2010 at 05:55:34PM -0500, magz wrote:
> >r->request_body_in_single_buf = 1;
> >rc = ngx_http_read_client_request_body(r, ngx_http_my_body_handler);
>
> При установке request_body_in_single_buf в 1, в rc
> возвращается NGX_AGAIN. Что на сколько я
> понимаю означает что не полностью
> заполнился буфер r->request_body->buf
После вызова ngx_http_read_client_request_body() нужно сделать
ровно то, что написал Виталий, а именно:
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
return rc;
}
return NGX_DONE;
Все остальные действия следует выполнять в обработчике
ngx_http_my_body_handler (когда nginx его позовёт).
И, чтобы два раза не вставать:
1. Я крайне не рекомендую пользоваться r->request_body->buf. Это
указатель на буфер чтения тела запроса, а не на само тело. Само тело
следует получить через цепочку r->request_body->bufs. Для случая
r->request_body_in_single_buf = 1 там будет один буфер.
2. Если тело больше, чем client_body_buffer_size[1], то оно
отправится на диск. Это следует иметь ввиду.
[1] http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#client_body_buffer_size
Maxim Dounin
Подробная информация о списке рассылки nginx-ru