J'utilise HttpClient 4.02 pour créer une connexion via proxy (en utilisant la méthode CONNECT) pour acheminer une connexion à un serveur distant. HttpClient est très pratique pour cela, mais je suis nouveau à l'API et ne peux pas voir comment obtenir au Socket
sous-jacent de la connexion tunnelée.HttpClient: comment obtenir le socket sous-jacent à partir d'une connexion existante?
Le code suivant extrait de: http://svn.apache.org/repos/asf/httpcomponents/httpclient/tags/4.0.1/httpclient/src/examples/org/apache/http/examples/client/ClientExecuteProxy.java
// make sure to use a proxy that supports CONNECT
HttpHost target = new HttpHost("target.server.net", 443, "https");
HttpHost proxy = new HttpHost("some.proxy.net", 8080, "http");
// general setup
SchemeRegistry supportedSchemes = new SchemeRegistry();
// Register the "http" and "https" protocol schemes, they are
// required by the default operator to look up socket factories.
supportedSchemes.register(new Scheme("http",
PlainSocketFactory.getSocketFactory(), 80));
supportedSchemes.register(new Scheme("https",
SSLSocketFactory.getSocketFactory(), 443));
// prepare parameters
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
ClientConnectionManager ccm = new ThreadSafeClientConnManager(params,
supportedSchemes);
DefaultHttpClient httpclient = new DefaultHttpClient(ccm, params);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
HttpGet req = new HttpGet("/");
System.out.println("executing request to " + target + " via " + proxy);
HttpResponse rsp = httpclient.execute(target, req);
HttpEntity entity = rsp.getEntity();
Ceci définit la connexion bien, mais est-il un moyen d'obtenir au Socket
sous-jacente afin pour moi d'utiliser un protocole personnalisé pour parler au serveur à target.server.net?
HTTP est un protocole en lui-même, est-il une raison que vous ne pouvez pas utiliser à la place emboîtements lisses? – dekz
@dekz C'est pour que mon application soit utilisable par les personnes derrière les pare-feu, où la seule issue serait un proxy web. En se connectant au proxy, il transmettra les données au serveur cible en tant que HTTPS, donnant une connexion sécurisée au serveur cible. – willjcroz
Quel est le protocole personnalisé que vous essayez d'utiliser? –