13
13
package org .asynchttpclient .proxy ;
14
14
15
15
import org .asynchttpclient .*;
16
+ import org .asynchttpclient .proxy .ProxyServer .Builder ;
16
17
import org .asynchttpclient .request .body .generator .ByteArrayBodyGenerator ;
17
18
import org .asynchttpclient .test .EchoHandler ;
19
+ import org .asynchttpclient .util .HttpConstants ;
18
20
import org .eclipse .jetty .proxy .ConnectHandler ;
19
21
import org .eclipse .jetty .server .Server ;
20
22
import org .eclipse .jetty .server .ServerConnector ;
29
31
import static org .asynchttpclient .test .TestUtils .addHttpsConnector ;
30
32
import static org .testng .Assert .assertEquals ;
31
33
34
+ import java .io .IOException ;
35
+
36
+ import javax .servlet .ServletException ;
37
+ import javax .servlet .http .HttpServletRequest ;
38
+ import javax .servlet .http .HttpServletResponse ;
39
+
32
40
/**
33
41
* Proxy usage tests.
34
42
*/
@@ -37,7 +45,7 @@ public class HttpsProxyTest extends AbstractBasicTest {
37
45
private Server server2 ;
38
46
39
47
public AbstractHandler configureHandler () throws Exception {
40
- return new ConnectHandler ();
48
+ return new ProxyHandler ();
41
49
}
42
50
43
51
@ BeforeClass (alwaysRun = true )
@@ -129,4 +137,39 @@ public void testPooledConnectionsWithProxy() throws Exception {
129
137
assertEquals (r2 .getStatusCode (), 200 );
130
138
}
131
139
}
140
+
141
+ @ Test
142
+ public void testFailedConnectWithProxy () throws Exception {
143
+ try (AsyncHttpClient asyncHttpClient = asyncHttpClient (config ().setFollowRedirect (true ).setUseInsecureTrustManager (true ).setKeepAlive (true ))) {
144
+ Builder proxyServer = proxyServer ("localhost" , port1 );
145
+ proxyServer .setCustomHeaders (r -> r .getHeaders ().add (ProxyHandler .HEADER_FORBIDDEN , "1" ));
146
+ RequestBuilder rb = get (getTargetUrl2 ()).setProxyServer (proxyServer );
147
+
148
+ Response response1 = asyncHttpClient .executeRequest (rb .build ()).get ();
149
+ assertEquals (403 , response1 .getStatusCode ());
150
+
151
+ Response response2 = asyncHttpClient .executeRequest (rb .build ()).get ();
152
+ assertEquals (403 , response2 .getStatusCode ());
153
+
154
+ Response response3 = asyncHttpClient .executeRequest (rb .build ()).get ();
155
+ assertEquals (403 , response3 .getStatusCode ());
156
+ }
157
+ }
158
+
159
+ public static class ProxyHandler extends ConnectHandler {
160
+ final static String HEADER_FORBIDDEN = "X-REJECT-REQUEST" ;
161
+
162
+ @ Override
163
+ public void handle (String s , org .eclipse .jetty .server .Request r , HttpServletRequest request ,
164
+ HttpServletResponse response ) throws ServletException , IOException {
165
+ if (HttpConstants .Methods .CONNECT .equalsIgnoreCase (request .getMethod ())) {
166
+ if (request .getHeader (HEADER_FORBIDDEN ) != null ) {
167
+ response .setStatus (HttpServletResponse .SC_FORBIDDEN );
168
+ r .setHandled (true );
169
+ return ;
170
+ }
171
+ }
172
+ super .handle (s , r , request , response );
173
+ }
174
+ }
132
175
}
0 commit comments