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.

110
demandé sur izb 2009-09-16 17:28:16

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);
283
répondu NickDK 2014-11-06 13:02:50

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 .

31
répondu Sean Owen 2012-09-05 14:36:37
Les mandataires

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);
18
répondu Pascal Thivent 2009-09-16 13:43:01

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");
10
répondu ZZ Coder 2009-09-16 13:32:16

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

9
répondu Daniel Worthington-Bodart 2013-08-10 17:21:14

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.

3
répondu Anton 2017-04-06 18:57:57

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);
2
répondu Norbert 2017-05-23 11:47:31