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);
});
});
しかし、それはうまくいきませんでした。
それで、何か提案はありますか?
これを行うのに役立つはずの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-agent 、 request-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) }
完全な答えではありませんが、これらの2つのモジュールに目を離したくない場合があります。
https://github.com/Ayms/node-Tor
サポートが追加されています: https://github.com/Ayms/node-bot 。
私は彼にいつこれが完了すると期待していたか尋ねる電子メールを送りました、その情報でこの投稿をすぐに更新します。
同じ問題があり、ノードと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);
});
* nixマシンを使用している場合は、tsocksを使用できます。プロセス全体を「socksify」するため、プロキシをまったくサポートしていないものに対しても使用できます。これ 記事 にはいくつかの素晴らしい例があります
基本的には、tsocks node myscript.js
と同じくらい簡単です。 tsocks npm start
で動作するかどうかはわかりませんが、試してみることができます(npmはコードをサブプロセスとして開始します)
必要なのは、最初にいくつかの設定を行うことです(server = 127.0.0.1
をetc/tsocks.conf
に入れてください)。