It looks like your tunnel proxy might not allow "CONNECT" statements.  You
should test first manually, using a telnet client.  If it works in telnet,
it should work in httpclient. hth.


On Thu, Jun 5, 2014 at 9:01 PM, galengt <[email protected]> wrote:

> Hi Ryan and Oleg,
>
> Thanks for this thread, has been very helpful. Like Ryan I have 4.2 locally
> and have overwritten createTunnelToProxy, but I think I am missing
> something.
>
> Execution looks like this:
> DefaultHttpClient client = new DefaultHttpClient();
> HttpRoutePlanner routePlanner = new TwoHopRoutePlanner(host, port, host2,
> port2);
> client.setRoutePlanner(routePlanner);
> client.execute(get)
>
> TwoHopRoutePlanner is super simple, implements HttpRoutePlanner and has the
> override below:
>         @Override public HttpRoute determineRoute(HttpHost target,
> HttpRequest request, HttpContext context) throws HttpException {
>             HttpHost proxy1 = new HttpHost(this.host1, this.port1);
>             HttpHost proxy2 = new HttpHost(this.host2, this.port2);
>             HttpHost[] proxies = new HttpHost[] {proxy1, proxy2};
>             return new HttpRoute(target, null,  proxies, false,
> TunnelType.TUNNELLED, LayerType.PLAIN);
>         }
>     }
>
>
> Here is my attempt at createTunnelToProxy:
>
>     protected boolean createTunnelToProxy(HttpRoute route, int hop,
> HttpContext context) throws HttpException, IOException {
>         //final HttpHost proxy = route.getProxyHost();
>         final HttpHost target = route.getTargetHost();
>         HttpResponse response = null;
>         for (int i = 0; i < route.getHopCount(); i++) {
>             final HttpHost proxy = route.getHopTarget(i);
>             if (!this.managedConn.isOpen()) {
>                 this.managedConn.open(route, context, this.params);
>             }
>
>             final HttpRequest connect = createConnectRequest(route,
> context);
>             connect.setParams(this.params);
>
>             // Populate the execution context
>             context.setAttribute(ExecutionContext.HTTP_TARGET_HOST,
> target);
>             context.setAttribute(ExecutionContext.HTTP_PROXY_HOST, proxy);
>             context.setAttribute(ExecutionContext.HTTP_CONNECTION,
> managedConn);
>             context.setAttribute(ExecutionContext.HTTP_REQUEST, connect);
>
>             this.requestExec.preProcess(connect, this.httpProcessor,
> context);
>
>             System.out.println("CONNECT Issued: " + "host:" +
> proxy.getHostName() + " port: " + proxy.getPort() + " scheme: " +
> proxy.getSchemeName());
>             response = this.requestExec.execute(connect, this.managedConn,
> context);
>
>             response.setParams(this.params);
>             this.requestExec.postProcess(response, this.httpProcessor,
> context);
>
>             final int status = response.getStatusLine().getStatusCode();
>             System.out.println("CONNECT status code: " + status);
>             if (status < 200) {
>                 throw new HttpException("Unexpected response to CONNECT
> request: " + response.getStatusLine());
>             }
>         }
>         final int status = response.getStatusLine().getStatusCode();
>         if (status > 299) {
>
>             // Buffer response content
>             final HttpEntity entity = response.getEntity();
>             if (entity != null) {
>                 response.setEntity(new BufferedHttpEntity(entity));
>             }
>
>             this.managedConn.close();
>             throw new TunnelRefusedException("CONNECT refused by proxy: " +
> response.getStatusLine(), response);
>         }
>
>         this.managedConn.markReusable();
>         return false;
>     }
>
>
> I added a couple printlns in there, here is an example output:
> CONNECT Issued: host:119.2.41.98 port: 8080 scheme: http
> CONNECT status code: 200
> CONNECT Issued: host:119.2.41.98 port: 8080 scheme: http
> CONNECT status code: 405
> CONNECT Issued: host:www.xhaus.com port: -1 scheme: http
> CONNECT status code: 405
>
> The body comes back with an error that includes: "The requested method
> CONNECT is not allowed for the URL /index.html". I am guessing I missed
> something in createTunnelToProxy, any help would be appreciated!
>
>
>
> --
> View this message in context:
> http://httpcomponents.10934.n7.nabble.com/Proxy-chaining-tp19965p23546.html
> Sent from the HttpClient-User mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to