通过NodeJS中的SOCKS5代理执行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在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);
  });
});
但它不起作用。

那么,有什么建议吗?

不是一个完整的答案,但您可能需要关注这两个模块

正在将支持添加到:


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

我刚刚发布了两个模块,可以帮助你做到这一点:和

只需使用这些,而不是默认的
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)  }