2013-01-01 8 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"); 

jedes Mal behandeln, wenn ich diesen Code verwenden IOException wirft die sagen, HTTP-Antwortcode 407. HTTP 407 bedeutet Proxy-Authentifizierung erforderlich ist. Warum dieses Problem auftritt, während ich ProxyUser und ProxyPassword festlege. enter image description here
http 401 wird auftreten, wenn ich falsches Passwort, aber es gebe mir immer 407, bedeutet, dass mein Code nicht Benutzername und Passwort. Im obigen Code ist user123 der Benutzername und passwD123 ist das Passwort für die Proxy-Authentifizierung.http 407 Proxy-Authentifizierung erforderlich: wie in Java-Code

+1

Client Welche http verwenden Sie? – Cratylus

+0

Ich versuche, manuellen Proxy, automatischen Proxy, keinen Proxy-Support-Browser in Java zu machen. Browser wie Firefox unterstützt dies, Extras-> Option-> Erweitert-> Netzwerk-> Einstellung. – dayitv89

Antwort

19

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

fand ich die Lösung dankt Herrn Vinod Singh.

Proxy-Authentifizierung in Java

Die üblichen Firmennetze bieten Internet-Zugang über einen Proxy-Server und manchmal auch sie erfordern eine Authentifizierung. Mögen Anwendungen die Verbindungen zu Servern öffnen, die sich außerhalb des Unternehmensintranets befinden. Also muss man die Proxy-Authentifizierung programmatisch durchführen. Glücklicherweise bietet Java einen transparenten Mechanismus für Proxy-Authentifizierungen.

Erstellen Sie eine einfache Klasse wie unten-

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

und diese Codezeilen setzen, bevor Sie Ihren Code ein URLConnection-

alle Anrufe erfolgreich durch die Proxy-Authentifizierung übergeben wird nun
Authenticator.setDefault(new ProxyAuthenticator("user", "password")); 
System.setProperty("http.proxyHost", "proxy host"); 
System.setProperty("http.proxyPort", "port"); 

öffnet.

+2

Dieser Code für die manuelle Proxy-Unterstützung. – dayitv89

+0

Ich habe http und https Proxy in Run-Konfiguration auf Eclipse mit Benutzer und Passwort eingerichtet, aus irgendeinem Grund funktioniert es intermittierend, was sehr seltsam ist. –

7

@GauravDS Sie erwähnt:

http://blog.vinodsingh.com/2008/05/proxy-authentication-in-java.html ich die Lösung dankt Herrn Vinod Singh gefunden. Proxy-Authentifizierung in Java Die üblichen Unternehmensnetzwerke bieten Internet-Zugang über Proxy-Server und manchmal erfordern sie auch Authentifizierung. Mögen Anwendungen die Verbindungen zu Servern öffnen, die sich außerhalb des Unternehmensintranets befinden. Also muss man die Proxy-Authentifizierung programmatisch durchführen. Glücklicherweise bietet Java einen transparenten Mechanismus für Proxy-Authentifizierungen. Erstellen Sie eine einfache Klasse wie unten- .
.
.
und diese Codezeilen einfügen, bevor Ihr Code eine URLConnection- öffnet Authenticator.setDefault(new ProxyAuthenticator("user", "password")); System.setProperty("http.proxyHost", "proxy host"); System.setProperty("http.proxyPort", "port"); Jetzt alle Anrufe werden erfolgreich durch die Proxy-Authentifizierung.

Was ist, wenn die Website, zu der Sie eine Verbindung herstellen, auch einen Benutzernamen/ein Passwort benötigt, um dies zu ermöglichen. Festlegen eines Standardauthentifikators (Authenticator.setDefault) wird fehlschlagen Ich rate, wenn die externe Website nach authentifizierten Benutzer suchen wird.

Irgendwelche Ansichten? .... Jemand?

Edit: 1 diesen Code früher verwendet wurde, und wurde immer den Fehler (407) Proxy-Authentifizierung erforderlich. Ich glaube, das war, weil die Authentifizierung von verschiedenen Hosts angefordert wurde. Wenn Sie einen Standardauthentifikator mit einem Benutzer/Passwort für einen Host festlegen, schlägt die Authentifizierung für den anderen anfordernden Host fehl.Ich habe gestern die folgende Änderung in die SimpleAuthenticator-Klasse vorgenommen und nun funktioniert es wie ein Zauber.

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

    } 

Mehr Infos hier: http://blog.ashwani.co.in/blog/2013-07-29/access-sharepoint-webservices-from-java-behind-proxy/

+0

Welche HTTP-Antwort für die Website-Authentifizierung? über Mechanismus für den Proxy-Server in Unternehmen/Institute-Netzwerk. – dayitv89

+0

Bearbeitete meine Antwort oben. – TheAshwaniK

+1

Sie könnten auch nach 'getRequestorType() == RequestorType.PROXY' suchen. Authentifizierung, die für Kreditanträge oder Login auf Anwendungen bedeutet normalerweise 401 und Proxys verwenden 407. –