Java:使用 TOR 作为代理

Udb*_*ain 5 java proxy tor

我正在尝试在我的 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 地址页面给了我一个不是我自己的地址,我现在甚至可以从洋葱页面读取数据。

但是,我不明白为什么它以前不起作用。这两个代码不是在做完全相同的事情吗?