Java - 使用Socket和Proxy

时间:2013-03-15 12:27:45

标签: java sockets networking proxy

我正在使用套接字通过HTTP连接到网站和API(我知道,这可以通过URL类更容易地完成,但我有一些理由选择这种方式。)

现在我想实现隐私功能,因此所有连接都应该通过代理重定向。但是我遇到了这样的问题。

我在Free Proxy List网站上查找并选择了一个免费代理,用于测试目的。我选择了一个具有较高正常运行时间的测试程序,但到目前为止还没有成功。

我的源代码:

URL url = new URL("someurl");
InetSocketAddress address = new InetSocketAddress("202.77.110.22", 8080); 
java.net.Proxy javaProxy = new Proxy(Proxy.Type.SOCKS, address);
Socket server = new Socket(javaProxy);
server.connect(new InetSocketAddress(url.getHost(), url.getPort()));

我想通过代理“202.77.110.22:8080”连接到URL。如果我使用Eclipse执行代码,我必须等待大约五分钟,然后收到以下错误:

  

SocketException:来自SOCKS服务器的格式错误的回复

使用Proxy.Type.HTTP而不是Proxy.Type.SOCKS时,收到以下错误消息:

  

IllegalArgumentException - 无效的代理

我知道在Stackoverflow上已经问过这个问题(形式),但没有一个答案对我有所帮助。也许我选择了一个不受支持的代理?它在使用Apache HttpComponents进行测试时有效。

所有帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

在Java 8之前,原始的 TCP套接字连接仅适用于SOCKS代理 - 这就是IllegalArgumentException - Invalid Proxy的原因。仅在Java 8中添加了通过HTTP代理连接原始套接字。

答案 1 :(得分:-1)

我认为你需要摆脱这条线:

InetSocketAddress address = new InetSocketAddress("202.77.110.22", 8080); 

并更改此行:

java.net.Proxy javaProxy = new Proxy(Proxy.Type.SOCKS, address);

为:

java.net.Proxy javaProxy = new Proxy(Proxy.Type.SOCKS, "202.77.110.22:8080");

因为您无法将代理指定为" InetSocketAddress"。这是两件不同的事情。