Frage

ich brauche Proxy-Authentifizierung gegen einen SOCKS-Proxy einzurichten. Ich fand heraus, diesen Beitrag Anweisungen geben, die Arbeit mit gängigen HTTP-Proxies erscheinen.

        httpclient.getHostConfiguration().setProxy("proxyserver.example.com", 8080);

        HttpState state = new HttpState();
        state.setProxyCredentials(new AuthScope("proxyserver.example.com", 8080), 
           new UsernamePasswordCredentials("username", "password"));
        httpclient.setState(state);

Würde das mit SOCKS Proxies auch oder habe ich etwas anderes zu tun?

War es hilfreich?

Lösung

Die Eigenschaften von Apache Httpclient sagt:

  

Transparente Verbindungen über SOCKS-Proxies (Version 4 und 5) mit nativen Java Socket-Unterstützung.

Mit „transparent“, ich glaube, sie meinen, dass es funktioniert, ohne dass Sie etwas Besonderes zu tun. Haben Sie einen SOCKS-Proxy verfügbar irgendwo? Können Sie nicht versuchen, es einfach zu sehen, ob es funktioniert?

Andere Tipps

Java unterstützt Socks-Proxy-Konfiguration über Vorlieben:

  • socksProxyHost für den Hostnamen des SOCKS-Proxy-Server
  • socksProxyPort für die Portnummer, der Standardwert ist 1080

z.

java -DsocksProxyHost=socks.mydomain.com

( Bearbeiten ) Für Ihr Beispiel, wenn der SOCKS-Proxy in der Art und Weise vor skizzierte konfiguriert wurde:

httpclient.getHostConfiguration().setProxy("proxyserver.example.com", 8080);
Credentials cred = new UsernamePasswordCredentials("username","password");
httpclient.getState().setProxyCredentials(AuthScope.ANY, cred); 

Sie können auch diese Variante verwenden (ohne Httpclient):

SocketAddress addr = new
InetSocketAddress("webcache.mydomain.com", 8080);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr); // Type.HTTP for HTTP

So das vorherige Beispiel abgeschlossen haben, können wir jetzt hinzufügen:

URL url = new URL("http://java.sun.com/");
URConnection conn = url.openConnection(proxy);

HTH

SOCKS wird nicht von Httpclient 3 nativ unterstützt. Sie können versuchen, die SOCKS in JDK unterstützen, wie von anderen vorgeschlagen. Der Nebeneffekt ist, dass Ihre ganze JVM durch den gleichen SOCKS-Proxy gehen wird.

Java 5 unterstützt Benutzername / Passwort-Authentifizierung in SOCKS (Typ 2). Alles, was Sie zu Setup zu tun haben, der Authentifikator wie diese,

Authenticator.setDefault(new Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password.toCharArray());
    }
});

Auch dies möglicherweise nicht für Sie, weil sie alle Authentifizierung in Ihrer JVM betrifft (HTTP Auth, Proxy Auth).

Sie können bieten eine benutzerdefinierte Steckdose Fabrik, die Geräte das SOCKS-Protokoll, und registrieren Sie es als Standard-HTTP-Protokollhandler. Diese Lösung hat eine Einschränkung ähnlich wie tuergeist Antwort oben hat - es gilt global, auf jede HTTP-Verbindung, die Sie durch Httpclient etablieren werden.

Wenn Sie dies ein Problem finden, werfen Sie einen Blick auf

Ich habe versucht,

System.setProperty("socksProxyHost", "socks.xyz.com");
System.setProperty("socksProxyPort", "1000");

und es funktioniert gut.

scroll top