2013-09-02 2 views
1

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

//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 работает неправильно для меня.

+0

Что такое значение url0? Использует ли он https: //? – tbsalling

+0

Да, это «https: // ....» – Chechulin

+0

Выполняете ли вы код в Windows - или на каком o/s он работает? – tbsalling

ответ

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

В соответствии с the official documentation JRE не распознает ни одно из них. Я считаю, что HTTP-клиент Apache может это сделать, но не цитируйте меня.

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

+0

Да, мне кажется, что я должен испортить 'Authenticator' для решения этой проблемы. – Chechulin

2

От How do I make HttpURLConnection use a proxy?:

Поскольку 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); 
+0

В моем вопросе я упомянул о некоторых проблемах с этим методом. – Chechulin

Смежные вопросы