2013-01-01 19 views
10
System.setProperty("http.proxySet", "true"); 
System.setProperty("java.net.useSystemProxies", "true"); 
System.setProperty("http.proxyHost", "192.168.1.103"); 
System.setProperty("http.proxyPort", "3128"); 
System.setProperty("http.proxyUser", "user123"); 
System.setProperty("http.proxyPassword", "passwD123"); 

url = new URL("http://www.google.co.in"); 

za każdym razem, gdy używam tego kodu, który rzuca IOException powiedzenia kod odpowiedzi HTTP 407. HTTP 407 oznacza wymagane uwierzytelnianie serwera proxy. dlaczego ten problem nadchodzi, gdy ustawiam proxyUser i proxyPassword. enter image description here http 401 pojawi się, jeśli wprowadzę złe hasło, ale zawsze da mi 407, oznacza to, że mój kod nie bierze nazwy użytkownika i hasła. W powyższym kodzie user123 to nazwa użytkownika, a passwD123 to hasło do autoryzacji proxy.http proxy uwierzytelniania 407: jak radzić sobie w kodzie java

+1

Co http klient używasz? – Cratylus

+0

Próbuję wykonać ręczne proxy, automatyczne proxy, bez przeglądarki obsługi proxy w java. Przeglądarka taka jak Firefox obsługuje to, Narzędzia-> Opcje-> Zaawansowane-> Sieć-> Ustawienia. – dayitv89

Odpowiedz

19

http://blog.vinodsingh.com/2008/05/proxy-authentication-in-java.html

znalazłem rozwiązanie dzięki Pan Vinod Singh.

uwierzytelniania proxy w Java

zwyczajne sieci korporacyjnych zapewnić dostęp do Internetu za pośrednictwem serwerów proxy i czasami wymagają uwierzytelnienia również. Aplikacje mogą otwierać połączenia z serwerami zewnętrznymi do intranetu korporacyjnego. Więc trzeba programowo uwierzytelniać proxy. Na szczęście Java zapewnia przejrzysty mechanizm uwierzytelniania proxy.

utworzyć prostą klasę jak below-

import java.net.Authenticator; 

class ProxyAuthenticator extends Authenticator { 

    private String user, password; 

    public ProxyAuthenticator(String user, String password) { 
     this.user = user; 
     this.password = password; 
    } 

    protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication(user, password.toCharArray()); 
    } 
} 

i umieścić te linie kodu przed kod otwiera URLConnection-

Authenticator.setDefault(new ProxyAuthenticator("user", "password")); 
System.setProperty("http.proxyHost", "proxy host"); 
System.setProperty("http.proxyPort", "port"); 

Teraz wszystkie połączenia będą z powodzeniem przejść przez uwierzytelniania proxy.

+2

Ten kod dla ręcznej obsługi proxy. – dayitv89

+0

Mam skonfigurować proxy http i https w konfiguracji uruchamiania na eclipse z użytkownikiem i hasłem, z jakiegoś powodu działa sporadycznie, co jest bardzo dziwne. –

7

@GauravDS można wymienić:

http://blog.vinodsingh.com/2008/05/proxy-authentication-in-java.html znalazłem rozwiązanie dzięki Pan Vinod Singh. Uwierzytelnianie proxy w Javie Zwykłe sieci korporacyjne zapewniają dostęp do Internetu za pośrednictwem serwerów proxy, a czasami wymagają również uwierzytelniania. Aplikacje mogą otwierać połączenia z serwerami zewnętrznymi do intranetu korporacyjnego. Więc trzeba programowo uwierzytelniać proxy. Na szczęście Java zapewnia przejrzysty mechanizm uwierzytelniania proxy. Utwórz prostą klasę, jak poniżej: .
.
.
i wstaw te linie kodu, zanim otworzy się kod URLConnection- Authenticator.setDefault(new ProxyAuthenticator("user", "password")); System.setProperty("http.proxyHost", "proxy host"); System.setProperty("http.proxyPort", "port"); Teraz wszystkie połączenia pomyślnie przejdą uwierzytelnianie proxy.

Co jeśli strona, z którą się łączysz, wymaga również nazwy użytkownika/hasła, aby na to zezwolić. Ustawienie domyślnego programu uwierzytelniającego (Authenticator.setDefault) nie powiedzie się. Domyślam się, że strona zewnętrzna będzie szukała uwierzytelnionego użytkownika.

Jakieś widoki? .... Ktoś?

Edit: 1 ten kod używany wcześniej i był coraz błędu (407) Wymagane uwierzytelnienie proxy. Sądzę, że było tak dlatego, że uwierzytelnianie było wymagane przez różne hosty. a po ustawieniu domyślnego uwierzytelniającego z jednym użytkownikiem/przebiegiem dla jednego hosta, uwierzytelnianie nie powiedzie się dla innego hosta żądającego.Wprowadziłem wczoraj następującą zmianę do klasy SimpleAuthenticator, która teraz działa jak urok.

protected PasswordAuthentication getPasswordAuthentication() 
    { 
    String requestingHost = getRequestingHost(); 
    if (requestingHost == proxyHost){ 
     System.out.println("getPasswordAuthentication() request recieved from->" + requestingHost); 
     return new PasswordAuthentication(proxyuser,proxypass.toCharArray()); 
    } 
    else{ 
     System.out.println("getPasswordAuthentication() request recieved from->" + requestingHost); 
     return new PasswordAuthentication(sharepointusername,sharepointpassword.toCharArray()); 
    } 

    } 

Więcej informacji tutaj: http://blog.ashwani.co.in/blog/2013-07-29/access-sharepoint-webservices-from-java-behind-proxy/

+0

jaka odpowiedź http dla uwierzytelniania witryny ?? Powyższy mechanizm serwera proxy w sieci korporacyjnej/instytutów. – dayitv89

+0

Zmieniono moją odpowiedź powyżej. – TheAshwaniK

+1

Można również sprawdzić 'getRequestorType() == RequestorType.PROXY'. Uwierzytelnienie, które oznacza logikę lub logowanie w aplikacjach zwykle używają 401 i proxy używają 407. –

Powiązane problemy