Как заставить 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");

Ответ 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);