J'ai trouvé que la configuration de http.proxyHost et http.proxyPort n'était d'aucune utilité pour httpClient. Comment forcer le httpClient à utiliser le proxy par des variables d'environnement ou VM arguments ou quelque chose comme ça sans changer de code?
dans https://issues.Apache.org/jira/browse/HTTPCLIENT-1128
SystemDefaultHttpClient a été ajouté au ver. 4.2
Le client HTTP (v 4.5.1 pour mon cas) peut utiliser un proxy système comme ceci:
HttpClient httpClient = HttpClientBuilder.create().useSystemProperties().build();
//or
HttpClient httpClient = HttpClients.createSystem();
vous pouvez forcer le proxy à HttpClient
par vous-même avec la méthode client.getHostConfiguration().setProxy(Host, port)
. Je crée généralement une classe wrapper autour de HttpClient
et lors de l'initialisation de cette classe, je configure le proxy à partir de n'importe quelle source (variables env. ...).
J'ai utilisé Java.net.ProxySelector.setDefault(new MyProxySelector())
dans une situation où vous ne pouvez pas définir de proxy directement sur HttpClient
. Vous devez implémenter votre propre classe ProxySelector et la méthode select effectue une sélection de proxy en fonction de l'URI demandé. Vous pouvez créer un mappage url-> proxy pour configurer une adresse URI particulière sur le proxy requis ou renvoyer un proxy pour tous les URI demandés dans le monde.
Comme je peux le voir dans le code source HttpClient, il n'y a pas d'autre moyen de configurer la méthode setProxy uniquement par proxy. J'utilise commons-httpclient-3.1.
AFAIK, vous ne pouvez pas gérer cela sans modifications de code, mais vous pouvez vous rapprocher du comportement natif en utilisant votre propre gestionnaire de connexions. Voir ProxySelector change le schéma d'URL de https: // en socket: //