我需要设立代理认证对个袜子的代理。我发现了 这个职位 发出指示,出现工作与常见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);

将这项工作与 袜子 代理,或者我要做不同的东西?

有帮助吗?

解决方案

特点的Apache的HttpClient页表示:

  

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

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

其他提示

Java支持袜子代理结构,通过设置:

  • socksProxyHost 主机名的袜子代理服务器
  • socksProxyPort 对口数量的默认值 1080

例如

java -DsocksProxyHost=socks.mydomain.com

(编辑)对你的例子,如果袜子代理配置的方式中所概述的:

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

你也可以使用这个变体(没有异常):

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

禾田

SOCKS不受HttpClient的3本身支持。您可以尝试袜子JDK支持他人的建议。副作用是,你的整个JVM将通过相同的SOCKS代理。

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

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

同样,这对你可能无法正常工作,因为它会影响您的JVM的所有验证(HTTP认证,代理验证)。

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

如果你发现这是一个问题,看一看的此对应时,其中的Oleg建议使用的HttpClient 4.0,但也指在HostConfiguration类的可能的补丁的HttpClient 3.x的。

另一种可能的解决方案,这是我的个人喜爱,是写一个包装HTTP代理到代理袜子

我试图

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

和它的正常工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top