如何配置了HTTPClient反对SOCKS代理认证?(How can I configure HT

2019-07-05 08:57发布

我需要设置代理认证对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);

将用SOCKS代理的工作,以及或做我必须做一些不同的东西?

Answer 1:

该功能页面的Apache的HttpClient说:

通过使用本地Java插座支撑SOCKS代理(版本4和5)透明连接。

随着“透明的”,我想他们的意思,它的作品没有你需要做什么特别的事情。 你有一个SOCKS代理可用的地方吗? 你就不能尝试一下,看看它是否起作用?



Answer 2:

Java支持通过喜好Socks代理配置:

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

java -DsocksProxyHost=socks.mydomain.com

编辑 )对于你的榜样,如果SOCKS代理在途中配置概述之前:

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

您也可以使用这个变体(无HttpClient的):

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

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

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

HTH



Answer 3:

SOCKS没有被HttpClient的3原生支持。 您可以尝试在JDK的SOCKS支持他人的建议。 副作用是,你的整个JVM将通过相同的SOCKS代理。

Java 5的支持SOCKS(类型2)用户名/密码的认证。 所有你需要做的是设置认证这样,

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

同样,这可能不适合你,因为它会影响您的JVM(HTTP认证,代理身份验证)的所有验证工作。



Answer 4:

你可以提供一个自定义套接字工厂,实现了SOCKS协议,并将其注册为默认的HTTP协议处理程序。 该解决方案具有类似tuergeist的回答上面有一个限制 - 它在全球范围适用,你会通过HttpClient的建立任何HTTP连接。

如果你发现这是一个问题,看看这种对应关系 ,其中奥列格建议使用的HttpClient 4.0,也就是指在HostConfiguration类中可能的补丁的HttpClient 3.x的

另一种可能的解决方案,这是我个人最喜欢的,就是写一个包装HTTP代理SOCKS代理。



Answer 5:

我试过了

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

和它的正常工作。



文章来源: How can I configure HTTPClient to authenticate against a SOCKS proxy?