通过NodeJS中的SOCKS5代理执行http请求
我计划通过Tor在NodeJS中执行一系列HTTP请求。通过NodeJS中的SOCKS5代理执行http请求,http,node.js,proxy,tor,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"
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);
});
});
但它不起作用。那么,有什么建议吗?不是一个完整的答案,但您可能需要关注这两个模块 正在将支持添加到:
我给他发了一封电子邮件,问他什么时候能完成这篇文章,他会很快用这些信息更新这篇文章。我刚刚发布了两个模块,可以帮助你做到这一点:和 只需使用这些,而不是默认的
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);
});
});
你应该试试波利波,这对我来说很有用;
我也遇到了同样的问题,被用作节点和TOR之间的代理
node (request) - polilp httproxy:8123 - polipo - tor (socks5:9050).
对于mac(osx with),其工作原理如下:
brew install polipo tor
tor # start top
polipo socksParentProxy=localhost:9050 # start polipo
工作示例
我知道我在回答一个老问题,但对于这个问题有一个更好的解决方案,关于如何在Node.js中使用sock4和sock5代理。为了简单起见,我将使用请求承诺模块,但是您也可以使用裸请求模块 要求: 例如:
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) }
如果你在*nix机器上,你可以使用tsocks。它将“socksify”整个过程,因此您甚至可以将其用于根本不支持代理的任何事情。这有一些很好的例子 基本上,它与执行
tsocks节点myscript.js
一样简单。我不确定它是否适用于tsocks npm start
,但您可以尝试一下(npm将代码作为子流程启动)
您只需要先进行一些设置(将
server=127.0.0.1
放到etc/tsocks.conf
)npm install socks5 http client:)知道为什么它不能在承诺内工作吗?我正在获取EconRefusedThis gives错误:connect EconRefused 127.0.0.1:1080
出于某种原因,它正在用1080注释覆盖我的端口9050,这是不鼓励的,因此答案应该是搜索解决方案的终点(与另一个参考的中途停留相比,随着时间的推移,它往往会过时)。请考虑在这里添加一个独立的概要,保持链接作为参考!但是我如何知道它是否工作,我正在连接一个websocket ws模块,并在这里测试一些免费的socks代理。不管端口和主机组合是否正确,它似乎都在连接。您可以尝试替换此URL来代替目标URL。如果代理正常工作,您应该将代理的IP和代理的ISP视为您自己的IP。我希望你明白了,有没有一种方法可以使用客户端证书呢?为什么有人否决了投票??这是唯一在这里有效的答案
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) }