我正在尝试在我的 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));
Run Code Online (Sandbox Code Playgroud)
结果字符串是 -
<!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" />
Run Code Online (Sandbox Code Playgroud)
(删除其余的,因为它不相关)。Tor 服务正在我的 PC 上运行
tcp 0 0 localhost:9050 *:* LISTEN
Run Code Online (Sandbox Code Playgroud)
什么地方出了错?
****更新****
好的,所以我通过对代码进行了微小的更改来使其工作。
InputStream in = url.openConnection(proxy).getInputStream();
Run Code Online (Sandbox Code Playgroud)
现在,代码不再在调用 openConnection(Proxy) 的 URL 对象上调用 openStream(),而是在打开连接后调用 getInputStream()。这绝对有效,因为 TOR 状态页面现在告诉我我已连接,IP 地址页面给了我一个不是我自己的地址,我现在甚至可以从洋葱页面读取数据。
但是,我不明白为什么它以前不起作用。这两个代码不是在做完全相同的事情吗?
| 归档时间: |
|
| 查看次数: |
2324 次 |
| 最近记录: |