1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty5.example.http.snoop;
17
18 import io.netty5.channel.ChannelHandlerContext;
19 import io.netty5.channel.SimpleChannelInboundHandler;
20 import io.netty5.handler.codec.http.HttpContent;
21 import io.netty5.handler.codec.http.HttpObject;
22 import io.netty5.handler.codec.http.HttpResponse;
23 import io.netty5.handler.codec.http.HttpUtil;
24 import io.netty5.handler.codec.http.LastHttpContent;
25 import io.netty5.util.CharsetUtil;
26
27 public class HttpSnoopClientHandler extends SimpleChannelInboundHandler<HttpObject> {
28
29 @Override
30 public void messageReceived(ChannelHandlerContext ctx, HttpObject msg) {
31 if (msg instanceof HttpResponse) {
32 HttpResponse response = (HttpResponse) msg;
33
34 System.err.println("STATUS: " + response.status());
35 System.err.println("VERSION: " + response.protocolVersion());
36 System.err.println();
37
38 if (!response.headers().isEmpty()) {
39 for (CharSequence name: response.headers().names()) {
40 for (CharSequence value: response.headers().getAll(name)) {
41 System.err.println("HEADER: " + name + " = " + value);
42 }
43 }
44 System.err.println();
45 }
46
47 if (HttpUtil.isTransferEncodingChunked(response)) {
48 System.err.println("CHUNKED CONTENT {");
49 } else {
50 System.err.println("CONTENT {");
51 }
52 }
53 if (msg instanceof HttpContent) {
54 HttpContent<?> content = (HttpContent<?>) msg;
55
56 System.err.print(content.payload().toString(CharsetUtil.UTF_8));
57 System.err.flush();
58
59 if (content instanceof LastHttpContent) {
60 System.err.println("} END OF CONTENT");
61 ctx.close();
62 }
63 }
64 }
65
66 @Override
67 public void channelExceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
68 cause.printStackTrace();
69 ctx.close();
70 }
71 }