5

Próbuję uzyskać zawartość adresu URL za pośrednictwem uwierzytelnionego serwera proxy. Jest to kod próbuję użyć:Uwierzytelnianie proxy HTTP HttpUrlConnection przechodzi w pętlę przekierowania

 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()); 

Z jakiegoś powodu, uwierzytelnianie wpada w pętlę przekierowania, więc wynik jest druk uwierzytelnienia „autentyczną” 20 razy, a następnie 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) 

Serwer proxy działa z podanymi poświadczeniami, próbowałem go przez przeglądarkę. Próbuję uzyskać to działa na kilka dni, próbowałem ustawiania właściwości systemu, apache httpclient i wszystko, co mogłem uzyskać z google. Wszelkie pomysły doceniane. :)

UPDATE:

testowałem z WireShark, dane uwierzytelniające proxy są we wniosku, ale serwer proxy wyrzuca z powrotem błędu 407. Ponownie, poświadczenia są w porządku, działa doskonale z przeglądarki (faktycznie skopiowałem je z kodu źródłowego, aby się upewnić).

Jest jednak jedna rzecz, którą zauważyłem. Wartość nagłówka Proxy-Authorization różni się jednym i tylko jednym znakiem między przeglądarką a żądaniem przesłanym przez java. Czy to może coś znaczyć?

+0

Mam dokładnie ten sam problem ... czy masz jakieś rozwiązanie lub jakieś nowe pomysły? – Ben

+0

Ponadto: czytałem o używaniu Cookie-Handera, ale nawet z włączoną domyślną obsługą plików Cookie CookieHandler.setDefault (nowy CookieManager (null, CookiePolicy.ACCEPT_ALL)); otrzymuję ten sam rezultat ... – Ben

+0

@Koocka Hi czy sprawiłeś, że działa? – Inoy

Odpowiedz

Powiązane problemy