Welcome! Log In Create A New Profile

Advanced

Re: не читает тело запроса целиком (recv not ready)

Maxim Dounin
March 24, 2010 10:40AM
Hello!

On Wed, Mar 24, 2010 at 09:57:33AM -0400, ak wrote:

> Задача:
> написать простейший модуль, который перехватывает сообщение из тела POST запроса и отправляет в другую систему.

[...]

> static ngx_int_t ngx_http_qpidapi_handler(ngx_http_request_t *r) {
> ...//переменные
>
> ngx_log_error(NGX_LOG_ERR,r->connection->log,NGX_EISDIR,"run handler!!!");
> rc = ngx_http_read_client_request_body(r, ngx_http_qpidapi_body_handler);
> if(rc==NGX_AGAIN) {
> ngx_log_error(NGX_LOG_ERR,r->connection->log,NGX_EISDIR,"NGX_AGAIN!!!");
> return NGX_AGAIN;
> }

Кто вам сказал что NGX_AGAIN надо как-то обрабатывать?

> ngx_log_error(NGX_LOG_ERR,r->connection->log,NGX_EISDIR,"after handler!!!");
>
> if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
> return rc;
> }
>
> //set status SUCCESS
> ...
> }

Вот тут не должно быть никаких "set SUCCESS" и многоточий.
Смотрите в ngx_http_proxy_module.c, там простой и понятный пример
как работать с чтением body.

Код должен быть примерно такой:

static ngx_int_t
ngx_http_your_content_handler(ngx_http_request_t *r)
{
...

rc = ngx_http_read_client_request_body(r, ngx_http_your_body_handler);

if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
return rc;
}

return NGX_DONE;
}

Когда будет прочитано тело запроса - nginx вызовет
ngx_http_your_body_handler, именно в нём следует продолжать всю
дальнейшую работу.

[...]

> Иногда данный тело данного запроса успешно считывается, иногда
> возникают ошибки. Объясните что неправильно сделал, или что
> может так влиять на работу модуля?

Если повезло и тело прочиталось сразу - оно у вас "спешно
считывается", если сразу не прочиталось - видимо и возникает
ошибка.

> Знаю, что запрос неправилен с точки зрения ХТТП - нехотелось
> возиться с boundary. может ли это повлиять на работу?

Нет. Протокол HTTP никак не регламентирует содержимое передаваемых
сообщений, главное чтобы длина сообщения была правильно указана.

[...]

Maxim DOunin

_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

не читает тело запроса целиком (recv not ready)

ak March 24, 2010 09:57AM

Re: не читает тело запроса целиком (recv not ready)

Maxim Dounin March 24, 2010 10:40AM

Re: не читает тело запроса целиком (recv not ready)

ak March 25, 2010 03:47AM

Re: не читает тело запроса целиком (recv not ready)

Maxim Dounin March 25, 2010 06:00AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 265
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready