HttpsUrlConnection с прокси - PullRequest
       12

HttpsUrlConnection с прокси

4 голосов
/ 23 ноября 2011

У меня есть код для выполнения POST-запросов с HttpsUrlConnection, код работает нормально, но у некоторых из моих пользователей есть SIM-карты с закрытой группой пользователей, и им нужно установить прокси в настройках своего apn. Если они устанавливают прокси, мне нужно изменить мой код. Я попробовал это:

    HttpsURLConnection connection = null;
    DataOutputStream outputStream = null;
    DataInputStream inputStream = null;
    String urlServer = "https://xxx";
    String boundary = "*****";

try {

    URL url = new URL(urlServer);
    SocketAddress sa = new InetSocketAddress("[MY PROXY HOST]",[My PROXY PORT]);
    Proxy mProxy = new Proxy(Proxy.Type.HTTP, sa);

    connection.setDoInput(true);
    connection.setDoOutput(true);
    connection.setUseCaches(false);
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Connection", "Keep-Alive");
    connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;boundary=" + boundary);

    //this is supposed to open the connection via proxy
    //if i use url.openConnection() instead, the code works
    connection = (HttpsURLConnection) url.openConnection(mProxy);

    //the following line will fail
    outputStream = new DataOutputStream(connection.getOutputStream());

    // [...] 

} catch (Exception ex) {
   ret = ex.getMessage();
}

Теперь я получаю сообщение об ошибке:

javax.net.ssl.SSLException: соединение закрыто одноранговым узлом

Если я использую url.OpenConnection () без Proxy и без Proxysettings в apn, код работает, в чем может быть проблема?

Ответы [ 2 ]

3 голосов
/ 23 ноября 2011

Вы можете попробовать этот альтернативный способ регистрации прокси-сервера:

Properties systemSettings=System.getProperties();

systemSettings.put("http.proxyHost", "your.proxy.host.here");
systemSettings.put("http.proxyPort", "8080"); // use actual proxy port
1 голос
/ 16 сентября 2015

Вы можете использовать библиотеку NetCipher , чтобы получить простую настройку прокси-сервера и современную конфигурацию TLS при использовании Android HttpsURLConnection.Звоните NetCipher.setProxy(), чтобы установить глобальный прокси приложения.NetCipher также настраивает экземпляр HttpsURLConnection для использования наилучшей поддерживаемой версии TLS, удаляет поддержку SSLv3 и настраивает лучший набор шифров для этой версии TLS.Сначала добавьте его в свой build.gradle :

compile 'info.guardianproject.netcipher:netcipher:1.2'

Или вы можете загрузить netcipher-1.2.jar и включить его прямо в свое приложение.Тогда вместо звонка:

HttpURLConnection connection = (HttpURLConnection) sourceUrl.openConnection(mProxy);

Позвоните по этому номеру:

NetCipher.setProxy(mProxy);
HttpURLConnection connection = NetCipher.getHttpURLConnection(sourceUrl);
...