web-dev-qa-db-fra.com

Comment faire en sorte que HttpURLConnection utilise un proxy?

Si je fais ça ...

conn = new URL(urlString).openConnection();
System.out.println("Proxy? " + conn.usingProxy());

ça imprime

Proxy? false

Le problème est que je suis derrière un proxy. D'où la JVM obtient-elle ses informations de proxy sous Windows? Comment puis-je configurer cela? Toutes mes autres applications semblent parfaitement satisfaites de mon proxy.

123
izb

Depuis Java 1.5, vous pouvez également passer une instance Java.net.Proxy à la méthode openConnection(proxy) :

//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 proxy requiert 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);
315
NickDK

C'est assez facile de répondre depuis Internet. Définissez les propriétés système http.proxyHost et http.proxyPort. Vous pouvez le faire avec System.setProperty() ou depuis la ligne de commande avec la syntaxe -D.

32
Sean Owen

Les proxies sont pris en charge via deux propriétés système: http.proxyHost et http.proxyPort. Ils doivent être définis sur le serveur proxy 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);
19
Pascal Thivent

Définissez ce qui suit avant d’ouvrir openConnection,

System.setProperty("http.proxyHost", "Host");
System.setProperty("http.proxyPort", "port_number");

Si le proxy requiert une authentification,

System.setProperty("http.proxyUser", "user");
System.setProperty("http.proxyPassword", "password");
10
ZZ Coder

Vous pouvez également définir

-Djava.net.useSystemProxies=true

Sous Windows et Linux, cela utilisera les paramètres du système, vous évitant ainsi de vous répéter (DRY)

http://docs.Oracle.com/javase/7/docs/api/Java/net/doc-files/net-properties.html#Proxies

10

Pour Java 1.8 et versions ultérieures, vous devez définir -Djdk.http.auth.tunneling.disabledSchemes= afin de créer des proxies avec une autorisation de base fonctionnant avec https.

5
Anton

La réponse approuvée fonctionnera ... si vous connaissez votre hôte proxy et votre port =). Mais si vous recherchez l'hôte proxy et portez la procédure ci-dessous devrait vous aider.

si proxy configuré automatiquement est donné: alors

1> ouvrir IE (ou n'importe quel navigateur)

2> obtenez l'adresse URL de votre navigateur via IE-> Outils-> option Internet-> connexions-> Paramètres LAN-> obtenez l'adresse et donnez l'URL, par exemple: as http://autocache.abc.com/ et entrez, un fichier sera téléchargé au format .pac, sauvegardé sur le bureau

3> ouvrez le fichier .pac dans textpad, identifiez PROXY:

Dans votre éditeur, ce sera quelque chose comme:

retourner "PROXY web-proxy.ind.abc.com:8080; PROXY proxy.sgp.abc.com:8080";

bravo à bekur de maven dans 5 min ne fonctionne pas

Une fois que vous avez l'hôte et le port, entrez dans ceci 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
Norbert