Сбой связи Java через веб-прокси с использованием Apache HttpClient

У меня есть настольный клиент, который отправляет данные на веб-сервер, и я не могу пройти через прокси-сервер.

Обновление:Я получаю ошибку 407 HTTP при попытке связи через прокси.

При загрузке информации с моего веб-сервера все нормально. Как только пользователь настраивает прокси-сервер (с помощью диалогового окна, которое я написал ), загрузка работает нормально. Но загрузка данных с помощью org.apache.http.client.HttpClient не работает.

Я настраиваю прокси-сервер с помощью такого кода после сбора информации из JDialog.

        System.setProperty("http.proxyHost", proxyHost);
        System.setProperty("http.proxyPort", "" + portNumber);

Теперь, когда мы это делаем, простые загрузки работают нормально. Например, у меня есть код, который считывает некоторые XML-данные с моего веб-сервера (, см. ниже ). В сети клиента ошибка в моем блоке catch отображалась до того, как были настроены параметры прокси, и после этого все работало нормально, как только был установлен правильный прокси.

/**
 * Loads a collection of exams from the web site. The URL is determined by
 * configuration or registration since it is State specific.
 */
public static int importExamsWS(StringBuilder msg) {
    try {
        java.net.URL onlineExams = new URL(examURL);
        //Parse the XML data from InputStream and store it.
        return importExams(onlineExams.openStream(), msg);

    } 
    catch (java.net.UnknownHostException noDNS) {
        showError(noDNS, "Unable to connect to proctinator.com to download the exam file.\n"
                + "There is probably a problem with your Internet proxy settings.");
    }
    catch (MalformedURLException | IOException duh) {
        showFileError(duh);
    }
    return 0;
}

Однако, когда я пытаюсь ОТПРАВИТЬ данные на веб-сервер, настройки прокси игнорируются, и возникает исключение IOException. А именно:

org.apache.http.conn.HttpHostConnectException: Connection to http://proctinator.com:8080 refused

Теперь я знаю, что порт 8080 не блокируется веб-фильтром клиента, потому что мы проверили адрес в веб-браузере.

Вот мой код для проверки идентификатора регистрации, введенного пользователем: Обновление :Теперь я также устанавливаю прокси в этом методе.

//Registered is just an enum with ACTIVE, INACTIVE, NOTFOUND, ERROR
public static Registered checkRegistration(int id) throws IOException {    
    httpclient = new DefaultHttpClient();
    Config pref = Config.getConfig(); //stores user-entered proxy settings.
    HttpHost proxy = new HttpHost(pref.getProxyServer(), pref.getProxyPort());
    httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
    URIBuilder builder = new URIBuilder();
    String path = "/Proctorest/rsc/register/" + id;
    try {
        builder.setScheme("http").setHost(server).setPort(8080).setPath(path);
        URI uri = builder.build();
        System.out.println("Connecting to " + uri.toString());
        HttpGet httpget = new HttpGet(uri);
        HttpResponse response = httpclient.execute(httpget);
        System.out.println(response.getStatusLine().toString());
        if(response.getStatusLine().getStatusCode()==200) {
            String msg = EntityUtils.toString(response.getEntity());
            GUI.globalLog.log(Level.INFO, "Server response to checkRegistration(" + id + "): " + msg);
            return Registered.stringToRegistered(msg);
        }
        else {
            GUI.globalLog.log(Level.INFO, "Server response status code to checkRegistration: " + 
                    response.getStatusLine().getStatusCode());
            return Registered.ERROR;
        }
    }
    catch(java.net.URISyntaxException bad) {
        System.out.println("URI construction error: " + bad.toString());
        return Registered.ERROR;
    }
}

Я почти уверен, что проблема связана с конфигурацией прокси-сервера, но в документах для SystemDefaultHttpClient утверждается, что он использует системные свойства для http.proxyHostи http.proxyPort. Я знаю, что свойства были установлены правильно, но я все еще получаю эту ошибку аутентификации.Просмотр журналов, сгенерированных моей программой, показал мне это:

checkRegistration INFO: Server response status code to checkRegistration: 407 

Как устранить эту ошибку аутентификации?

5
задан Thorn 8 July 2012 в 22:27
поделиться