我打算通过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);
});
});
但它没有用。
那么,有什么建议吗?
答案 0 :(得分:29)
我刚刚发布了两个可以帮助您执行此操作的模块:socks5-http-client和socks5-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-agent,request-promise
示例:
print
答案 2 :(得分:2)
不是一个完整的答案,但您可能希望密切关注这两个模块。
https://github.com/Ayms/node-Tor
正在添加支持:https://github.com/Ayms/node-bot。
我给他发了一封电子邮件,询问他什么时候打算完成这件事,我会很快用这些信息更新这篇文章。
答案 3 :(得分:0)
答案 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
)