我试图在我的Java应用程序中使用TOR作为代理。这是我用于测试的基本代码:
SocketAddress sockAddr = new InetSocketAddress("localhost",9050);
Proxy proxy = new Proxy(Proxy.Type.SOCKS,sockAddr);
URL url = new URL("https://check.torproject.org/");
//URL url = new URL("https://api.ipify.org/");
url.openConnection(proxy);
InputStream in = url.openStream();
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] stuff = new byte[1024];
int readBytes = 0;
while((readBytes = in.read(stuff))>0) {
bout.write(stuff,0,readBytes);
}
byte[] result = bout.toByteArray();
System.out.print(new String(result));
结果字符串是 -
<!doctype html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>
Sorry. You are not using Tor.
</title>
<link rel="icon" type="image/x-icon" href="/torcheck/img/tor-off.png" />
(删除其余部分,因为它不相关)。 Tor服务正在我的电脑上运行
tcp 0 0 localhost:9050 *:* LISTEN
出了什么问题?
**** **** UPDATE
好吧,所以我通过对代码进行微小改动来实现它。
InputStream in = url.openConnection(proxy).getInputStream();
代码在调用openConnection(Proxy)的URL对象上调用openStream(),而不是在打开连接后调用getInputStream()。 这肯定是有效的,因为TOR状态页面现在告诉我我已连接,IP地址页面给了我一个不属于我自己的地址,我甚至可以从洋葱页面读取数据。
但是,我不明白为什么之前没有工作。 Aren这两个代码完全相同吗?