3

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

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

出于测试目的,我从免费代理列表网站上寻找并选择了一个免费代理。我为我的测试程序选择了一个正常运行时间较长的设备,但到目前为止还没有成功。

我的源代码:

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 测试它时工作。

所有帮助表示赞赏。

4

2 回答 2

2

在 Java 8 之前,原始TCP 套接字连接只能通过 SOCKS 代理工作——这就是你得到IllegalArgumentException - Invalid Proxy. 只有在 Java 8 中才添加了通过 HTTP 代理的原始套接字连接。

于 2015-07-15T03:28:28.543 回答
-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”。这是两个不同的东西。

于 2015-08-21T17:55:51.840 回答