11package me .chanjar .weixin .common .util .http .apache ;
22
3+ import org .apache .http .HttpRequestInterceptor ;
4+ import org .apache .http .HttpResponseInterceptor ;
35import org .apache .http .client .methods .CloseableHttpResponse ;
46import org .apache .http .client .methods .HttpGet ;
7+ import org .apache .http .client .methods .HttpUriRequest ;
8+ import org .apache .http .client .protocol .HttpClientContext ;
59import org .apache .http .impl .client .CloseableHttpClient ;
10+ import org .apache .http .protocol .BasicHttpContext ;
11+ import org .apache .http .protocol .HttpContext ;
12+ import org .apache .http .protocol .HttpCoreContext ;
613import org .testng .Assert ;
714import org .testng .annotations .Test ;
815
916import java .io .IOException ;
1017import java .util .ArrayList ;
18+ import java .util .Arrays ;
1119import java .util .List ;
20+ import java .util .stream .Collectors ;
21+ import java .util .stream .Stream ;
1222
1323public class DefaultApacheHttpClientBuilderTest {
1424 @ Test
@@ -24,7 +34,7 @@ public void testBuild() throws Exception {
2434 }
2535 for (TestThread testThread : threadList ) {
2636 testThread .join ();
27- Assert .assertNotEquals (-1 ,testThread .getRespState (),"请求响应code不应为-1" );
37+ Assert .assertNotEquals (-1 , testThread .getRespState (), "请求响应code不应为-1" );
2838 }
2939
3040 for (int i = 1 ; i < threadList .size (); i ++) {
@@ -38,6 +48,47 @@ public void testBuild() throws Exception {
3848 }
3949 }
4050
51+ @ Test
52+ void testHttpClientWithInterceptor () throws Exception {
53+ DefaultApacheHttpClientBuilder builder = DefaultApacheHttpClientBuilder .get ();
54+
55+
56+ List <String > interceptorOrder = new ArrayList <>();
57+
58+ HttpRequestInterceptor requestInterceptor1 = (request , context ) -> {
59+ context .setAttribute ("interceptor_called" , "requestInterceptor1" );
60+ interceptorOrder .add ("requestInterceptor1" );
61+ };
62+
63+ HttpRequestInterceptor requestInterceptor2 = (request , context ) -> {
64+ interceptorOrder .add ("requestInterceptor2" );
65+ };
66+
67+ HttpResponseInterceptor responseInterceptor1 = (response , context ) -> {
68+ interceptorOrder .add ("responseInterceptor1" );
69+ };
70+
71+ HttpResponseInterceptor responseInterceptor2 = (response , context ) -> {
72+ interceptorOrder .add ("responseInterceptor2" );
73+ };
74+
75+ builder .setRequestInterceptors (Stream .of (requestInterceptor1 , requestInterceptor2 ).collect (Collectors .toList ()));
76+ builder .setResponseInterceptors (Stream .of (responseInterceptor1 , responseInterceptor2 ).collect (Collectors .toList ()));
77+
78+ try (CloseableHttpClient client = builder .build ()) {
79+ HttpUriRequest request = new HttpGet ("http://localhost:8080" );
80+ HttpContext context = HttpClientContext .create ();
81+ try (CloseableHttpResponse resp = client .execute (request , context )) {
82+ Assert .assertEquals ("requestInterceptor1" , context .getAttribute ("interceptor_called" ), "成功调用 requestInterceptor1 并向 content 中写入了数据" );
83+
84+ // 测试拦截器执行顺序
85+ Assert .assertEquals ("requestInterceptor1" , interceptorOrder .get (0 ));
86+ Assert .assertEquals ("requestInterceptor2" , interceptorOrder .get (1 ));
87+ Assert .assertEquals ("responseInterceptor1" , interceptorOrder .get (2 ));
88+ Assert .assertEquals ("responseInterceptor2" , interceptorOrder .get (3 ));
89+ }
90+ }
91+ }
4192
4293 public static class TestThread extends Thread {
4394 private CloseableHttpClient client ;
@@ -47,7 +98,7 @@ public static class TestThread extends Thread {
4798 public void run () {
4899 client = DefaultApacheHttpClientBuilder .get ().build ();
49100 HttpGet httpGet = new HttpGet ("http://www.sina.com.cn/" );
50- try (CloseableHttpResponse resp = client .execute (httpGet )){
101+ try (CloseableHttpResponse resp = client .execute (httpGet )) {
51102 respState = resp .getStatusLine ().getStatusCode ();
52103 } catch (IOException ignored ) {
53104 }
0 commit comments