通过NodeJS中的SOCKS5代理执行http请求

时间:2012-07-17 20:13:57

标签: http node.js proxy tor

我打算通过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);
  });
});

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

6 个答案:

答案 0 :(得分:29)

我刚刚发布了两个可以帮助您执行此操作的模块: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);
    });
});

答案 1 :(得分:7)

我知道我正在回答一个老问题,但有一个更好的解决方案可用于这个问题,关于如何使用sock4& Node.js中的sock5代理为简单起见,我将使用请求承诺模块,但您也可以使用裸请求模块。

要求:socks-proxy-agentrequest-promise

示例:

print

答案 2 :(得分:2)

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

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

正在添加支持:https://github.com/Ayms/node-bot

我给他发了一封电子邮件,询问他什么时候打算完成这件事,我会很快用这些信息更新这篇文章。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

对于mac(osx with brew),它的工作原理如下:

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

使用request

的工作示例
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);   

        });

答案 5 :(得分:0)

如果您在* nix机器上,则可以使用tsocks。它将“袜子化”整个过程,因此即使您根本不支持代理,也可以使用它。这个article有一些很棒的例子

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

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