Java HttpURLC ошибка туннелирования соединения 407 - PullRequest
0 голосов
/ 05 сентября 2018

Я получаю упомянутый код ошибки в одной из моих программ. Я искал решения для Stackoverflow и пытался следовать предложениям по проблемам, о которых сообщали Илана Платонова и PPr . К сожалению, это не помогло устранить ошибки.

В качестве следующего шага я просто попытался запустить код, представленный в Ilana Platonov , вместе с принятыми там резолюциями. Мой код: примеры пакетов;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.PasswordAuthentication;
import java.net.Proxy;
import java.net.URL;


public class MyProxyPass {
    public MyProxyPass( String proxyHost, int proxyPort, final String userid, final String password, String url ) {

try {
        /* Create a HttpURLConnection Object and set the properties */
        URL u = new URL( url );
        Proxy proxy = new Proxy( Proxy.Type.HTTP, new InetSocketAddress( proxyHost, proxyPort ) );
        HttpURLConnection uc = (HttpURLConnection) u.openConnection( proxy );

        Authenticator.setDefault( new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                if (getRequestorType().equals( RequestorType.PROXY )) {
                    return new PasswordAuthentication( userid, password.toCharArray() );
                }
                return super.getPasswordAuthentication();
            }
        } );
        uc.connect();
        /* Print the content of the url to the console. */
        showContent( uc );
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}

private void showContent( HttpURLConnection uc ) throws IOException {
    InputStream i = uc.getInputStream();
    char c;
    InputStreamReader isr = new InputStreamReader( i );
    BufferedReader br = new BufferedReader( isr );
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println( line );
    }
}

public static void main( String[] args ) {
    String proxyhost = "xxx.xxx.xx.xx";
    int proxyport = xxxx;
    final String proxylogin = "JOKER";
    final String proxypass = "passxxx";

    String url = "http://www.google.de";
    String surl = "https://www.google.de";

    System.setProperty("javax.net.ssl.trustStore", "C:\\Users\\JOKER\\Documents\\eclipse-jee-photon-R-win32\\eclipse");
    System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

    //new MyProxyPass( proxyhost, proxyport, proxylogin, proxypass, url );  // uncomment this line to see that the https request works!
    //System.out.println( url + " ...ok" );   // uncomment this line to see that the https request works!
    new MyProxyPass( proxyhost, proxyport, proxylogin, proxypass, surl );
    System.out.println( surl + " ...ok" );
}
}

Однако я все еще получаю те же ошибки, о которых сообщали другие:

   java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"
https://www.google.de ...ok 
at    sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2124)
at    sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:183)
at    sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
    at    examples.MyProxyPass.<init>(MyProxyPass.java:32)
at examples.MyProxyPass.main(MyProxyPass.java:63)

Что сработало для других, а не для меня:

  1. Часто выдвигаемое предложение об установке переменных jdk.http.auth.tunneling.disabledSchemes и jdk.http.auth.proxying.disabledSchemes не работало. Я установил их как пустые в файле .. \ Java \ jdk1.8.0_112 \ jre \ lib \ net.properties.

  2. Связывание с различными аргументами JVM, предложенными Andreas Panagiotidis , тоже не помогло.

  3. С https://bugs.eclipse.org/bugs/show_bug.cgi?id=422665 Я также пытался исключить библиотеки HTTP, которые могут конфликтовать. -Dorg.eclipse.ecf.provider.filetransfer.excludeContributors = org.eclipse.ecf.provider.filetransfer.httpclient4

Я использую:

  • Eclipse IDE Photon Release (4.8.0),
  • Java-версия "1.8.0_112" (сборка 1.8.0_112-b15)
  • Windows 10
  • Я нахожусь за корпоративным прокси и провёл два полных дня без успеха. (

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

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Я столкнулся с другой ситуацией, когда я получил ту же ошибку (с правильными данными прокси).

Could not retrive data: java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required"

На этот раз ошибка произошла из-за версии Java 1.8.0_111. После этого обновления Java базовая аутентификация для туннелирования HTTPS была отключена . Это делается путем добавления протокола в список disabledScheme, т.е. jdk.http.auth.tunneling.disabledSchemes = Basic в файле lib / net.properties.

Чтобы устранить эту ошибку, включите базовую аутентификацию, задав для переменной jdk.http.auth.tunneling.disabledSchemes строку emtpy следующим образом: '-Djdk.http.auth.tunneling.disabledSchemes ='

Включение / отключение базовой аутентификации для HTTPS

0 голосов
/ 04 октября 2018

Корпоративный прокси был виновником! После того, как я решил эти проблемы, код, который я разместил выше, работал без проблем.

...