Netty автоматически устанавливает длину содержимого

Я хочу, чтобы Netty (точнее, Reactor Netty) устанавливала заголовок Content-Length в моих запросах. В настоящее время, даже когда я отправляю тело запроса в своем запросе, заголовок Content-Length не устанавливается. Можно ли настроить Netty для автоматической установки (установите 0, если тело запроса отсутствует)? Postman делает это.

Спасибо!


person Prashant Pandey    schedule 05.09.2019    source источник


Ответы (2)


Я могу ответить на этот вопрос для netty.... В netty это не делается автоматически, и единственный способ сделать это - либо установить его самостоятельно, либо добавить ChannelOutboundHandler, который делает это в зависимости от FullHttpMessage, которое он получает.

person Norman Maurer    schedule 05.09.2019
comment
Эй, @Norman, спасибо за ответ. Я пытаюсь это сделать. Об этом будет обновлено. - person Prashant Pandey; 05.09.2019
comment
Можете ли вы указать мне какой-нибудь ресурс о том, как добавить обработчики в мой конвейер запросов? Спасибо, очень плохо знаком с Нетти здесь. - person Prashant Pandey; 05.09.2019
comment
в netty это просто вызов pipeline.addLast(...). Не уверен, как это работает с реактором-натти. - person Norman Maurer; 05.09.2019

Это зависит от контента, который вы хотите отправить. Если это тип Mono, то мы рассчитаем длину контента и отправим FullHttpMessage. Если это тип Flux, мы будем рассматривать это как фрагментированное содержимое и, следовательно, не будем вычислять длину содержимого. Вот пример с Mono:

public static void main(String[] args) {
    String response =
        HttpClient.create()
                .wiretap(true)
                .post()
                .uri("https://postman-echo.com/post")
                .send(Mono.just(Unpooled.wrappedBuffer("something".getBytes(Charset.defaultCharset()))))
                .responseContent()
                .aggregate()
                .asString()
                .block();
    System.out.println(response);
}

В логах должно быть видно следующее:

17:01:46.813 [reactor-http-nio-4] DEBUG reactor.netty.http.client.HttpClient - [id: 0x668bd78f, L:/xxx:xxx - R:postman-echo.com/34.239.20.132:443] WRITE: 118B
         +-------------------------------------------------+
         |  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f |
+--------+-------------------------------------------------+----------------+
|00000000| 50 4f 53 54 20 2f 70 6f 73 74 20 48 54 54 50 2f |POST /post HTTP/|
|00000010| 31 2e 31 0d 0a 75 73 65 72 2d 61 67 65 6e 74 3a |1.1..user-agent:|
|00000020| 20 52 65 61 63 74 6f 72 4e 65 74 74 79 2f 64 65 | ReactorNetty/de|
|00000030| 76 0d 0a 68 6f 73 74 3a 20 70 6f 73 74 6d 61 6e |v..host: postman|
|00000040| 2d 65 63 68 6f 2e 63 6f 6d 0d 0a 61 63 63 65 70 |-echo.com..accep|
|00000050| 74 3a 20 2a 2f 2a 0d 0a 63 6f 6e 74 65 6e 74 2d |t: */*..content-|
|00000060| 6c 65 6e 67 74 68 3a 20 39 0d 0a 0d 0a 73 6f 6d |length: 9....som|
|00000070| 65 74 68 69 6e 67                               |ething          |
+--------+-------------------------------------------------+----------------+
person Violeta Georgieva    schedule 11.09.2019