On Thu, 2013-11-21 at 15:58 +0530, Dhruvakumar P G wrote: > On 11/21/2013 2:18 PM, Oleg Kalnichevski wrote: > > On Wed, 2013-11-20 at 19:30 +0530, Dhruvakumar P G wrote: > >> Hello, > >> > >> I have upgraded HttpClient library from 4.0.1 to 4.3.1 and using it in > >> my web application for communicating to twitter REST API service. If I > >> don't set the http proxy in web container(Glassfish2.1) and try > >> connecting to twitter from my home network, HttpClient is able to make > >> https requests to twitter service. > >> But if I set the http proxy in Glassfish, and try connecting to twitter > >> from corporate network(I must set the proxy given by company to talk to > >> internet), HttpClient is not able to make https requests to twitter > >> service. > >> I have been trying out different ways but none of them works : > >> 1. If I set the proxy in Request configuration : > >> requestConfigBuilder.setProxy(proxy). It > >> throws*org.apache.http.conn.HttpConnectionHostException : Connection > >> timedout* > >> 2. If I set the proxy in Http client object : > >> httpClientBuilder.setProxy(proxy). It throws > >> *org.apache.http.conn.UnsupportedSchemeException : http protocol is not > >> supported* > >> 3. Setting the proxy the following way also didn't work : > >> DefaultProxyRoutePlanner routePlanner = new > >> DefaultProxyRoutePlanner(proxy); > >> httpClientBuilder.setRoutePlanner(routePlanner) > >> > >> What am I missing here ? Is there any other way that I can try out to > >> setup proxy ? > >> > > Try this > > > > --- > > CloseableHttpClient client = HttpClients.custom() > > .setRoutePlanner(new > > SystemDefaultRoutePlanner(ProxySelector.getDefault())) > > .build(); > > --- > > > > Oleg > Hi, > > Thanks for your suggestion. > I did more research on the issue, played with the Apache's sample java > program reference > <http://hc.apache.org/httpcomponents-client-ga/httpclient/examples/org/apache/http/examples/client/ClientExecuteProxy.java>. > > Snippet of my program looks like this : > I have defined a TrustManager which accepts any certificates, > SocketFactoryRegistry > X509TrustManager tm = new X509TrustManager() { > @Override > public void checkClientTrusted(X509Certificate[] > chain,String authType) { > } > @Override > public void checkServerTrusted(X509Certificate[] > chain,String authType) { > } > @Override > public X509Certificate[] getAcceptedIssuers() { > return null; > } > }; > Defined SocketFactoryRegistry which I pass to > PoolingHttpClientConnectionManager's constructor : > SSLConnectionSocketFactory socketFactory = null; > try { > SSLContext sslContext = > SSLContext.getInstance(SSLConnectionSocketFactory.TLS); > sslContext.init(null, new TrustManager[]{tm}, null); > socketFactory = new SSLConnectionSocketFactory(sslContext); > } catch(NoSuchAlgorithmException | KeyManagementException n) { > } > if(socketFactory == null){ > socketFactory = SSLConnectionSocketFactory.getSocketFactory(); > } > socketFactoryRegistry = > RegistryBuilder.<ConnectionSocketFactory>create() > .register("https", socketFactory) > .build(); > target = new HttpHost("issues.apache.org", 443, "https"); > * connManager = new > PoolingHttpClientConnectionManager(socketFactoryRegistry);* > *httpclientBuilder.setConnectionManager(connManager);* > *httpclientBuilder.setDefaultRequestConfig(RequestConfig.custom().setProxy(proxy).build());* > > The above code throws *I/O exception > (org.apache.http.conn.UnsupportedSchemeException) caught when processing > request: http protocol is not supported* > > If I don't pass socketFactoryRegistry to > PoolingHttpClientConnectionManager's constructor and instantiate > connection manager object: > *connManager = new PoolingHttpClientConnectionManager();* > This will work without any issues and sample program is able to > communicate with apache host. > > if I pass socketFactoryRegistry to connection manager constructor, why > does my program fail to connect to hotst - issues.apache.org ? > Why does it fail even though trust manager trusts/accepts all > certificates ? > > > Thanks & Regards, > Dhruva
This happens because you forget to register a connection socket factory for the 'http' scheme. Oleg --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org