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ć?
Mam dokładnie ten sam problem ... czy masz jakieś rozwiązanie lub jakieś nowe pomysły? – Ben
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
@Koocka Hi czy sprawiłeś, że działa? – Inoy