web-dev-qa-db-ja.com

NodeJSでSOCKS5プロキシを介してhttpリクエストを行う

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);
  });
});

しかし、それはうまくいきませんでした。
それで、何か提案はありますか?

29
Fredefl

これを行うのに役立つはずの2つのモジュールを公開しました: 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);
    });
});

私は古い質問に答えていることを知っていますが、Node.jsでsock4およびsock5プロキシを使用する方法について、この質問に利用できるより良い解決策があります。簡単にするために、リクエストプロミスモジュールを使用しますが、ベアリクエストモジュールを使用することもできます。

要件: socks-proxy-agentrequest-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)  }
8
Point Networks

完全な答えではありませんが、これらの2つのモジュールに目を離したくない場合があります。

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

サポートが追加されています: https://github.com/Ayms/node-bot

私は彼にいつこれが完了すると期待していたか尋ねる電子メールを送りました、その情報でこの投稿をすぐに更新します。

2
Hortinstein
0
Tim

同じ問題があり、ノードとTOR間のプロキシとして polipo を使用しました

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

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);   

        });
0
Simon Fakir

* nixマシンを使用している場合は、tsocksを使用できます。プロセス全体を「socksify」するため、プロキシをまったくサポートしていないものに対しても使用できます。これ 記事 にはいくつかの素晴らしい例があります

基本的には、tsocks node myscript.jsと同じくらい簡単です。 tsocks npm startで動作するかどうかはわかりませんが、試してみることができます(npmはコードをサブプロセスとして開始します)

必要なのは、最初にいくつかの設定を行うことです(server = 127.0.0.1etc/tsocks.confに入れてください)。

0
Kamil Tomšík