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代理,还是我必须做一些不同的事情?
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