30

我打算通过 Tor 在 NodeJS 中执行一系列 HTTP 请求。
Tor 使用 SOCKS5,所以我出去寻找一种在 NodeJS 中代理 HTTP 请求的方法。
我打算使用默认的 http.request() 函数来完成这项工作。
但是,我似乎找不到使用代理的方法。
有人建议我可以这样做:

var http = require("http");
var options = {
  host: "localhost",
  port: 9050,
  path: "http://check.torproject.org",
  method: 'GET',
  headers: {
    Host: "http://check.torproject.org",
  }
};
var req = http.request(options, function(res) {
  res.on('data', function (chunk) {
    console.log('BODY: ' + chunk);
  });
});

但它没有用。
那么,有什么建议吗?

4

6 回答 6

31

我刚刚发布了两个可以帮助您做到这一点的模块:socks5- http -clientsocks5- https -client

只需使用那些而不是默认http模块。API 是一样的。例如:

require('socks5-http-client').request(options, function(res) {
    console.log('STATUS: ' + res.statusCode);
    console.log('HEADERS: ' + JSON.stringify(res.headers));
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        console.log('BODY: ' + chunk);
    });
});
于 2013-03-05T01:33:44.493 回答
12

我知道我在回答一个老问题,但是对于这个问题有一个更好的解决方案,关于如何在 Node.js 中使用 sock4 和 sock5 代理。为了简单起见,我将使用 request-promise 模块,但是您也可以使用裸 request 模块。

要求:socks-proxy-agent , request-promise

例子:

async function main() {


var proxy = "socks4://1.2.3.4:35618"

var agent = new SocksProxyAgent(proxy);

var options = {
    uri: 'http://targetUrl',
    agent: agent,
    headers: {
        'User-Agent': 'Request-Promise'
    }
}

try {
    var responce = await rp(options)
} catch(err) {
    console.log(err)
}

console.log(responce)  }
于 2018-02-17T12:35:29.417 回答
2

不是一个完整的答案,但您可能希望密切关注这两个模块。

https://github.com/Ayms/node-Tor

支持被添加到:https://github.com/Ayms/node-bot

我给他发了一封电子邮件,询问他预计何时完成,将很快用该信息更新这篇文章。

于 2012-08-14T20:32:26.237 回答
1

我有同样的问题并使用polipo作为节点和 TOR 之间的代理

node (request) - polilp httproxy:8123 -  polipo - tor (socks5:9050).

对于 mac(带有brew的 osx ),它的工作方式如下:

brew install polipo tor
tor # start top
polipo socksParentProxy=localhost:9050 # start polipo

带有请求的工作示例

var request = require('request');
var options = {'url':'https://check.torproject.org/', 'proxy':'http://localhost:8123'}

request(options,
            function (error, response, body) {
            if (error){
                console.log(error);
                return;
            }

            var usingTor = (body.indexOf('Congratulations. This browser is configured to use Tor.')  !== -1);
            expect(usingTor).to.equal(true);   

        });
于 2016-09-14T09:25:09.980 回答
1

如果你在 *nix 机器上,你可以使用 tsocks。它将“socksify”整个过程,因此您甚至可以将它用于根本不支持代理的任何东西。这篇文章有一些很好的例子

基本上它就像做一样容易tsocks node myscript.js。我不确定它是否适用,tsocks npm start但您可以尝试一下(npm 将您的代码作为子进程启动)

server = 127.0.0.1您只需要先进行一些设置(放入etc/tsocks.conf

于 2018-07-17T07:40:10.127 回答
0

哟应该试试 polipo,这对我有用; http://ccm.net/faq/805-installing-an-easy-http-proxy-cache-polipo

于 2015-07-22T05:35:25.340 回答