如何配置HTTPClient以对SOCKS代理进行身份验证?

aba*_*gat 5 java proxy http apache-commons-httpclient

我需要针对SOCKS代理设置代理身份验证.我发现这篇文章提供的说明似乎与常见的HTTP代理一起使用.

        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);
Run Code Online (Sandbox Code Playgroud)

这也适用于SOCKS代理,还是我必须做一些不同的事情?

tue*_*ist 6

Java通过首选项支持Socks代理配置:

  • socksProxyHost 用于SOCKS代理服务器的主机名
  • socksProxyPort 对于端口号,默认值为 1080

例如

java -DsocksProxyHost=socks.mydomain.com
Run Code Online (Sandbox Code Playgroud)

(编辑)对于您的示例,如果socks代理是按照前面概述的方式配置的:

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

您也可以使用此变体(不使用httpclient):

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

所以完成前面的例子,我们现在可以添加:

URL url = new URL("http://java.sun.com/");
URConnection conn = url.openConnection(proxy);
Run Code Online (Sandbox Code Playgroud)

HTH


Jes*_*per 4

Apache HTTPClient 的功能页面显示:

使用本机 Java 套接字支持通过 SOCKS 代理(版本 4 和 5)进行透明连接。

对于“透明”,我猜他们的意思是它不需要你做任何特别的事情就可以工作。你有可用的 SOCKS 代理吗?你就不能尝试一下看看是否有效吗?