From 6dd1159e430f0a133686ec629ce3aa78cf635b04 Mon Sep 17 00:00:00 2001 From: sodawang Date: Tue, 3 Nov 2020 16:46:11 +0800 Subject: [PATCH 1/2] =?UTF-8?q?week3-step1=20=E5=B0=B1=E5=90=8E=E7=AB=AF?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=E7=9A=84=E5=86=85=E5=AE=B9=EF=BC=8C=E6=9B=BF?= =?UTF-8?q?=E6=8D=A2=E6=88=90=E5=86=99=E6=AD=BB=E7=9A=84helloworld?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../outbound/httpclient4/HttpOutboundHandler.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java index 856dc168..a3e0586b 100644 --- a/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java @@ -95,13 +95,14 @@ private void handleResponse(final FullHttpRequest fullRequest, final ChannelHand // response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(value.getBytes("UTF-8"))); // response.headers().set("Content-Type", "application/json"); // response.headers().setInt("Content-Length", response.content().readableBytes()); - - + //作业第一步,把从后端拿到响应内容,换成写死的helloworld byte[] body = EntityUtils.toByteArray(endpointResponse.getEntity()); -// System.out.println(new String(body)); -// System.out.println(body.length); + System.out.println("httpClient proxy got body: " + new String(body)); + //写死的替换内容 + String homeworkResp = "helloworld"; + System.out.println("homework step3, change resp to `helloworld`"); - response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(body)); + response = new DefaultFullHttpResponse(HTTP_1_1, OK, Unpooled.wrappedBuffer(homeworkResp.getBytes())); response.headers().set("Content-Type", "application/json"); response.headers().setInt("Content-Length", Integer.parseInt(endpointResponse.getFirstHeader("Content-Length").getValue())); From 0755eb8a37baece1bbba00580e33fb10e0f9015d Mon Sep 17 00:00:00 2001 From: sodawang Date: Tue, 3 Nov 2020 16:51:28 +0800 Subject: [PATCH 2/2] =?UTF-8?q?week3-step3=20=E5=B0=86=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E5=A4=B4+nio-myname=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=88=B0=E5=8F=91=E5=BE=80backendpoint=E7=9A=84=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=A4=B4=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../filter/AddNameToRequestHeaderFilter.java | 13 +++++++++++++ .../gateway/inbound/HttpInboundHandler.java | 7 ++++++- .../outbound/httpclient4/HttpOutboundHandler.java | 4 ++++ 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/AddNameToRequestHeaderFilter.java diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/AddNameToRequestHeaderFilter.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/AddNameToRequestHeaderFilter.java new file mode 100644 index 00000000..f87bde75 --- /dev/null +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/filter/AddNameToRequestHeaderFilter.java @@ -0,0 +1,13 @@ +package io.github.kimmking.gateway.filter; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http.*; + +public class AddNameToRequestHeaderFilter implements HttpRequestFilter { + + @Override + public void filter(FullHttpRequest fullRequest, ChannelHandlerContext ctx) { + HttpHeaders headers = fullRequest.headers(); + headers.add("nio", "soda"); + } +} diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java index 22fb2525..28112957 100644 --- a/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/inbound/HttpInboundHandler.java @@ -1,5 +1,7 @@ package io.github.kimmking.gateway.inbound; +import io.github.kimmking.gateway.filter.AddNameToRequestHeaderFilter; +import io.github.kimmking.gateway.filter.HttpRequestFilter; import io.github.kimmking.gateway.outbound.httpclient4.HttpOutboundHandler; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelInboundHandlerAdapter; @@ -13,10 +15,12 @@ public class HttpInboundHandler extends ChannelInboundHandlerAdapter { private static Logger logger = LoggerFactory.getLogger(HttpInboundHandler.class); private final String proxyServer; private HttpOutboundHandler handler; + private HttpRequestFilter filter; public HttpInboundHandler(String proxyServer) { this.proxyServer = proxyServer; handler = new HttpOutboundHandler(this.proxyServer); + filter = new AddNameToRequestHeaderFilter(); } @Override @@ -34,7 +38,8 @@ public void channelRead(ChannelHandlerContext ctx, Object msg) { // if (uri.contains("/test")) { // handlerTest(fullRequest, ctx); // } - + + filter.filter(fullRequest, ctx); handler.handle(fullRequest, ctx); } catch(Exception e) { diff --git a/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java b/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java index a3e0586b..aaa3d4b5 100644 --- a/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java +++ b/02nio/nio02/src/main/java/io/github/kimmking/gateway/outbound/httpclient4/HttpOutboundHandler.java @@ -17,6 +17,7 @@ import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; +import java.util.Map; import java.util.concurrent.*; import static io.netty.handler.codec.http.HttpResponseStatus.NO_CONTENT; @@ -62,6 +63,9 @@ public void handle(final FullHttpRequest fullRequest, final ChannelHandlerContex private void fetchGet(final FullHttpRequest inbound, final ChannelHandlerContext ctx, final String url) { final HttpGet httpGet = new HttpGet(url); //httpGet.setHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_CLOSE); + for (Map.Entry header : inbound.headers()) { + httpGet.setHeader(header.getKey(), header.getValue()); + } httpGet.setHeader(HTTP.CONN_DIRECTIVE, HTTP.CONN_KEEP_ALIVE); httpclient.execute(httpGet, new FutureCallback() { @Override