HttpUrlConnection прокси удостоверяване влиза в цикъл за пренасочване

Опитвам се да получа съдържанието на URL чрез удостоверен прокси. Това е кодът, който се опитвам да използвам:

        Authenticator authenticator = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                System.out.println("authenticating");
                return (new PasswordAuthentication("username", "password".toCharArray()));
            }
        };
        Authenticator.setDefault(authenticator);
        URL url = new URL("http://www.google.com");
        InetSocketAddress proxyAddress = new InetSocketAddress("address.of.proxy", 6060);
        Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyAddress);
        HttpURLConnection uc = (HttpURLConnection) url.openConnection(proxy);
        uc.connect();
        System.out.println(uc.getResponseCode());

По някаква причина удостоверяването попада в цикъл за пренасочване, така че резултатът е, че удостоверителят отпечатва „удостоверяване“ 20 пъти, след което ProtocolException

java.net.ProtocolException: Server redirected too many  times (20)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1846)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
at java.net.URLConnection.getContent(URLConnection.java:739)
at proxytest.RunThis.main(RunThis.java:29)

Проксито работи с дадените идентификационни данни, пробвах го през браузър. Опитвам се да накарам това да работи с дни, опитах да задам системни свойства, apache httpclient и всичко, което можех да измъкна от Google. Всички идеи се оценяват. :)

АКТУАЛИЗАЦИЯ:

Тествах с WireShark, подробностите за удостоверяване на проксито са в заявката, но проксито връща грешка 407. Отново идентификационните данни са наред, работят перфектно от браузър (всъщност ги копирах от изходния код, за да се уверя).

Има обаче едно нещо, което забелязах. Стойността на заглавката Proxy-Authorization се различава в един и само един знак между браузъра и заявката, изпратена от java. Може ли това да означава нещо?


person Koocka    schedule 05.05.2015    source източник
comment
имам абсолютно същия проблем...имате ли решение или нови идеи?   -  person Ben    schedule 08.01.2016
comment
Освен това: Прочетох за използването на манипулатор на бисквитки, но дори и с активиран манипулатор на бисквитки по подразбиране CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL)); получавам същия резултат...   -  person Ben    schedule 08.01.2016
comment
@Koocka Здравей, успя ли да работи?   -  person Inoy    schedule 21.04.2016
comment
Имам същия проблем..   -  person dinhokz    schedule 11.10.2016


Отговори (2)


Authenticator.setDefault(authenticator); трябва да е след openConnection(proxy);

URL url = new URL("http://www.google.com");
InetSocketAddress proxyAddress = new InetSocketAddress("address.of.proxy", 6060);
Proxy proxy = new Proxy(Proxy.Type.HTTP, proxyAddress);
HttpURLConnection uc = (HttpURLConnection) url.openConnection(proxy);
    Authenticator.setDefault(new Authenticator() {
          protected PasswordAuthentication getPasswordAuthentication() {
            return (new PasswordAuthentication("username", "password".toCharArray()));
          }
        });
uc.connect();
System.out.println(uc.getResponseCode());
person Andres Robles    schedule 07.02.2021

Просто задайте JVM свойство:

jdk.http.auth.tunneling.disabledSchemes = ""

Вижте: http://www.oracle.com/technetwork/java/javase/8u111-relnotes-3124969.html

Оставете го тук, защото един час проучвах този въпрос.

person alex_ua    schedule 19.09.2017
comment
Добре дошли в StackOverflow. Моля, научете как да напишете добър отговор тук: Как да отговорите. - person Marco; 19.09.2017