Как мне заставить HttpURLConnection использовать прокси? - PullRequest
122 голосов
/ 16 сентября 2009

Если я сделаю это ...

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

печатает

Proxy? false

Проблема в том, что я за прокси. Откуда JVM получает информацию о прокси в Windows? Как мне это настроить? Все мои другие приложения кажутся совершенно довольными моим прокси.

Ответы [ 7 ]

314 голосов
/ 16 сентября 2009

Начиная с Java 1.5, вы также можете передать экземпляр java.net.Proxy в метод 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);

Если ваш прокси-сервер требует аутентификации, он даст вам ответ 407.

В этом случае вам понадобится следующий код:

    Authenticator authenticator = new Authenticator() {

        public PasswordAuthentication getPasswordAuthentication() {
            return (new PasswordAuthentication("user",
                    "password".toCharArray()));
        }
    };
    Authenticator.setDefault(authenticator);
32 голосов
/ 16 сентября 2009

Это довольно легко ответить из интернета.Установите системные свойства http.proxyHost и http.proxyPort.Вы можете сделать это с помощью System.setProperty() или из командной строки с синтаксисом -D.

19 голосов
/ 16 сентября 2009

Прокси поддерживаются через два системных свойства: http.proxyHost и http.proxyPort. Они должны быть установлены на прокси-сервер и порт соответственно. Следующий базовый пример иллюстрирует это:

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);
10 голосов
/ 10 августа 2013

Вы также можете установить

-Djava.net.useSystemProxies=true

В Windows и Linux будут использоваться системные настройки, поэтому вам не нужно повторяться (СУХОЙ)

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

10 голосов
/ 16 сентября 2009

Установите следующее, прежде чем открыватьConnection,

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

Если прокси-сервер требует аутентификации,

System.setProperty("http.proxyUser", "user");
System.setProperty("http.proxyPassword", "password");
5 голосов
/ 06 апреля 2017

Для Java 1.8 и выше вы должны установить -Djdk.http.auth.tunneling.disabledSchemes=, чтобы прокси с базовой авторизацией работали с https.

2 голосов
/ 11 июня 2015

Утвержденный ответ будет работать ... если вы знаете свой прокси-хост и порт =). Но в случае, если вы ищете прокси-хост и порт, следующие шаги должны помочь

если указан автоматически настроенный прокси:

1> открыть IE (или любой браузер)

2> получить адрес URL из браузера через IE-> Сервис-> Интернет опция-> соединения-> настройки локальной сети-> получить адрес и указать URL, например: as http://autocache.abc.com/ и введите, файл будет загружен с .pac формат, сохранить на рабочий стол

3> открыть .pac файл в текстовой панели, определить PROXY:

В вашем редакторе это будет выглядеть примерно так:

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

благодарность бекуру от Maven за 5 минут не работает

Как только у вас есть хост и порт, просто зайдите в это, и все готово к работе

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("web-proxy.ind.abc.com", 8080));
        URLConnection connection = new URL(url).openConnection(proxy);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...