URLConnection не использует настройки прокси

У меня проблема с HttpsURLConnection - прокси не используется.
Вот код:

//proxy
String type = "https";
System.getProperties().put(type + ".proxyHost", host);
System.getProperties().put(type + ".proxyPort", port);
System.getProperties().put(type + ".proxyUser", username);
System.getProperties().put(type + ".proxyPassword", password);

/*some SSL stuff*/

//connection
URL url = new URL(url0);
URLConnection urlConnection = url.openConnection();
urlConnection.setUseCaches(false);
urlConnection.setDoInput(true);
urlConnection.setDoOutput(false);           
urlConnection.setRequestProperty("Connection", "Keep-Alive");   

HttpsURLConnection httpConn = (HttpsURLConnection)urlConnection;
httpConn.setInstanceFollowRedirects(true);
httpConn.setRequestProperty("Proxy-Authorization", "Basic " + Base64Converter.encode(username + ":" + password));
httpConn.connect();

Все настройки прокси игнорируются соединением, а httpConn.usingProxy() равно false.
Я также пытался передать Proxy экземпляр url.openConnection() и установить логин/пароль прокси по умолчанию Authenticator. В этом случае соединение использовало прокси, но я получил 407, поэтому мне кажется, что Authenticator работает некорректно.


person Chechulin    schedule 02.09.2013    source источник
comment
Каково значение url0? Он действительно использует https://?   -  person tbsalling    schedule 02.09.2013
comment
Да, это https://....   -  person Chechulin    schedule 02.09.2013
comment
Вы запускаете код в Windows или на какой операционной системе он работает?   -  person tbsalling    schedule 02.09.2013
comment
Да, я запускаю его в Windows.   -  person Chechulin    schedule 02.09.2013


Ответы (2)


System.getProperties().put(type + ".proxyUser", username);
System.getProperties().put(type + ".proxyPassword", password);

Согласно официальной документации, JRE не не признал ни того, ни другого. Я считаю, что HTTP-клиент Apache может это сделать, но не цитируйте меня.

Вам необходимо установить java.net.Authenticator.

person user207421    schedule 02.09.2013
comment
Да, кажется, я должен возиться с Authenticator, чтобы решить эту проблему. - person Chechulin; 02.09.2013

Из Как заставить HttpURLConnection использовать прокси?:

Начиная с java 1.5 вы также можете передать экземпляр java.net.Proxy в метод openConnection():

//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);
person pfrank    schedule 02.09.2013
comment
Я упомянул в своем вопросе, что есть некоторые проблемы с этим методом. - person Chechulin; 02.09.2013