Как заставить HttpURLConnection использовать прокси?
Если я это сделаю...
conn = new URL(urlString).openConnection();
System.out.println("Proxy? " + conn.usingProxy());
он печатает
Proxy? false
Проблема в том, что я за прокси. Где JVM получает свою прокси-информацию из Windows? Как мне настроить это? Все мои другие приложения выглядят вполне довольны моим прокси.
Ответы
Ответ 1
Так как 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);
Ответ 2
Это довольно легко ответить из Интернета. Задайте системные свойства http.proxyHost
и http.proxyPort
. Вы можете сделать это с помощью System.setProperty()
или из командной строки с синтаксисом -D
.
Ответ 3
Прокси поддерживаются двумя системными свойствами: 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);
Ответ 4
Задайте следующие параметры перед открытием соединения,
System.setProperty("http.proxyHost", "host");
System.setProperty("http.proxyPort", "port_number");
Если прокси требует аутентификации,
System.setProperty("http.proxyUser", "user");
System.setProperty("http.proxyPassword", "password");
Ответ 5
Вы также можете установить
-Djava.net.useSystemProxies=true
В Windows и Linux это будет использовать системные настройки, поэтому вам не нужно повторять (DRY)
http://docs.oracle.com/javase/7/docs/api/java/net/doc-files/net-properties.html#Proxies
Ответ 6
Для Java 1.8 и выше вы должны установить -Djdk.http.auth.tunneling.disabledSchemes=
, чтобы сделать прокси с базовой авторизацией, работающей с https.
Ответ 7
Утвержденный ответ будет работать... если вы знаете свой прокси-сервер и порт =). Но в случае, если вы ищете прокси-хост и порт, шаги, указанные ниже, должны помочь
если задан автоматический настроенный прокси: затем
1 > открыть IE (или любой браузер)
2 > получить адрес URL из браузера через IE- > Tools- > internet option- > connections- > LAN Settings- > получить адрес и указать в url например: as http://autocache.abc.com/ и введите, файл будет загружен с помощью .pac, сохранить на рабочий стол
3 > открыть файл .pac в текстовой панели, определить PROXY:
В вашем редакторе это будет выглядеть примерно так:
return "PROXY web-proxy.ind.abc.com:8080; PROXY proxy.sgp.abc.com:8080";
kudos to bekur из maven за 5 минут не работает
Как только у вас есть хост и порт, просто входите в это и ваше добро, чтобы пойти
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("web-proxy.ind.abc.com", 8080));
URLConnection connection = new URL(url).openConnection(proxy);