Comment faire pour que HttpURLConnection utilise un proxy?
si je fais ça...
conn = new URL(urlString).openConnection();
System.out.println("Proxy? " + conn.usingProxy());
it imprime
Proxy? false
le problème est que je suis derrière un mandataire. Où la JVM obtient-elle ses informations proxy à partir de Windows? Comment puis-je le configurer? Toutes mes autres applications semblent parfaitement satisfaites avec mon mandataire.
7 réponses
depuis java 1.5 vous pouvez également passer un java.net.Proxy instance à la openConnection(proxy)
méthode:
//Proxy instance, proxy ip = 10.0.0.1 with port 8080
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080));
conn = new URL(urlString).openConnection(proxy);
si votre mandataire nécessite une authentification, il vous donnera la réponse 407.
dans ce cas, vous aurez besoin du code suivant:
Authenticator authenticator = new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return (new PasswordAuthentication("user",
"password".toCharArray()));
}
};
Authenticator.setDefault(authenticator);
C'est assez facile de répondre à partir de l'internet. Définir les propriétés du système http.proxyHost
et http.proxyPort
. Vous pouvez le faire avec System.setProperty()
, ou depuis la ligne de commande avec la syntaxe -D
.
sont supportés par deux propriétés du système: http.proxyHost et http.proxyPort. Ils doivent être positionnés sur le serveur mandataire et le port respectivement. L'exemple de base suivant l'illustre:
String url = "http://www.google.com/",
proxy = "proxy.mydomain.com",
port = "8080";
URL server = new URL(url);
Properties systemProperties = System.getProperties();
systemProperties.setProperty("http.proxyHost",proxy);
systemProperties.setProperty("http.proxyPort",port);
HttpURLConnection connection = (HttpURLConnection)server.openConnection();
connection.connect();
InputStream in = connection.getInputStream();
readResponse(in);
Définir les points suivants avant de vous openConnection,
System.setProperty("http.proxyHost", "host");
System.setProperty("http.proxyPort", "port_number");
si le proxy nécessite une authentification,
System.setProperty("http.proxyUser", "user");
System.setProperty("http.proxyPassword", "password");
vous pouvez aussi définir
-Djava.net.useSystemProxies=true
sous Windows et Linux ceci utilisera les paramètres du système pour que vous n'ayez pas besoin de vous répéter (DRY)
http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html#Proxies
pour Java 1.8 et plus, vous devez définir -Djdk.http.auth.tunneling.disabledSchemes=
pour faire des mandataires avec une autorisation de base fonctionnant avec https.
approuvé réponse va travailler ... si vous connaissez votre hôte mandataire et port =) . Mais dans le cas où vous êtes à la recherche de l'hôte proxy et du port, les étapes ci-dessous devraient vous aider
si le proxy Auto configuré est donné: alors
1> ouvrir IE (ou tout navigateur)
2> Obtenez l'adresse url de votre navigateur par IE- > outils - > internet option - > Connexions - > Paramètres LAN-> obtenir l'adresse et donner l'url par exemple: as http://autocache.abc.com / et enter, un fichier sera téléchargé avec .format pac, save to desktop
3> ouvert .fichier pac dans textpad, identifier PROXY:
dans votre éditeur, il va venir quelque chose comme:
return" PROXY web-proxy.ind.abc.com: 8080; PROXY mandataire.sgp.abc.com: 8080";
bravo à bekur de maven dans 5 min pas de travail
une fois que vous avez l'hôte et le port juste pop dans ce et votre bon à aller
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("web-proxy.ind.abc.com", 8080));
URLConnection connection = new URL(url).openConnection(proxy);