web-dev-qa-db-fra.com

Sans modifier le code, comment forcer httpClient à utiliser le proxy par des variables d'environnement ou des arguments JVM

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?

32
user496949
21
Krystian Nowak

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();
11
wangf

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.

6
michal.kreuzman

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: //

0
Alastair McCormack