ライブラリを使わずにNode.jsでプロキシを使用する方法

ライブラリを使わずにNode.jsでプロキシを使用する方法

Node.js における HTTP プロキシの理解

プロキシサーバーは、本質的にはアプリケーションとターゲットサーバー間の仲介役として機能します。プロキシを使用すると、ネットワークリクエストはこの仲介サーバーを経由してルーティングされ、IPアドレスが隠蔽され、多くの場合、地理的制限やレート制限を回避できます。.

Node.jsでは、外部ライブラリに依存せずに、HTTPおよびHTTPSリクエストをプロキシ経由に手動で設定できます。このアプローチは無駄がなく、透明性が高く、リクエストパイプラインをきめ細かく制御できます。.


サポートされているプロキシの種類

プロキシタイプ 対象となるプロトコル ユースケース例 Node.js 組み込みサポート
ウェブ ウェブ ウェブスクレイピング、API呼び出し はい (http モジュール)
HTTPS HTTPS、HTTP セキュアリクエスト、ログインフロー 部分的 (https モジュール)
SOCKS TCP ゲーム、メッセージング いいえ(手動での実装が必要)

この記事では、Node.js コア モジュールで直接管理できる HTTP/HTTPS プロキシに焦点を当てます。.


無料プロキシの入手

実装する前に、信頼できるプロキシ リストが必要です。. プロキシローラー は、国別フィルタリングと稼働時間統計を備えた定期的に更新される無料プロキシを提供する、推奨されるソースです。.

ProxyRoller からのデータ形式の例:

IP: 103.216.82.153
Port: 6667
Protocol: HTTP
Country: India

プロキシ経由で HTTP リクエストを送信する (ライブラリなし)

ステップ1: 必要なNode.jsモジュールをインポートする

const http = require('http');
const https = require('https');

ステップ2: プロキシとターゲットURLを解析する

取得したいとします https://api.ipify.org ProxyRoller からの HTTP プロキシ経由:

const proxy = {
  host: '103.216.82.153',
  port: 6667
};
const targetUrl = 'http://api.ipify.org/';

ステップ3: プロキシ経由のHTTPリクエストを構成する

HTTP プロキシは、完全な URL をパスとして含む標準のリクエストを送信することによって機能します。.

const options = {
  host: proxy.host,
  port: proxy.port,
  method: 'GET',
  path: targetUrl,
  headers: {
    Host: new URL(targetUrl).host
  }
};

const req = http.request(options, (res) => {
  let data = '';
  res.on('data', chunk => data += chunk);
  res.on('end', () => {
    console.log('Response:', data);
  });
});
req.on('error', (err) => console.error('Error:', err));
req.end();

要点:
path HTTP プロキシを使用する場合は完全な URL である必要があります。.
– ザ Host ヘッダーは宛先ドメインと一致する必要があります。.

ステップ4: HTTPプロキシ経由のHTTPSリクエストの処理(CONNECTメソッド)

HTTPSリクエストをトンネリングするには、 CONNECT 宛先への生の TCP トンネルを確立するメソッドです。.

const targetHost = 'api.ipify.org';
const targetPort = 443;

const connectOptions = {
  host: proxy.host,
  port: proxy.port,
  method: 'CONNECT',
  path: `${targetHost}:${targetPort}`
};

const req = http.request(connectOptions);
req.end();

req.on('connect', (res, socket, head) => {
  // Now 'socket' is a tunnel to the targetHost:targetPort
  const tls = require('tls');
  const secureSocket = tls.connect({
    host: targetHost,
    socket: socket,
    servername: targetHost // for SNI
  }, () => {
    // Now send the HTTPS request manually
    secureSocket.write([
      `GET / HTTP/1.1`,
      `Host: ${targetHost}`,
      `Connection: close`,
      ``,
      ``
    ].join('\r\n'));
  });

  let response = '';
  secureSocket.on('data', d => response += d);
  secureSocket.on('end', () => {
    console.log('HTTPS Response:', response);
  });
});

注:
– このアプローチは、次のようなHTTPSエンドポイントにも適用できます。 https://api.ipify.org.
– TLS ハンドシェイクと HTTP プロトコルを手動で処理する必要があります。.


概要表: Node.js での手動プロキシ

シナリオ 使用されたモジュール 主要オプション 注記
HTTPプロキシ経由のHTTP http path: full URL 最も簡単、パスとホストを変更するだけ
HTTPプロキシ経由のHTTPS http, tls method: CONNECT トンネリング、手動のTLSハンドシェイクが必要
HTTPSプロキシ経由のHTTP ネイティブではサポートされていません サードパーティのモジュールまたはカスタムコードが必要
SOCKSプロキシ ネイティブではサポートされていません 次のようなモジュールを使用する socks またはカスタムを実装する

プロキシのローテーション(ベストプラクティス)

スクレイピングや複数のリクエストを行うときは、禁止を回避するためにプロキシをローテーションします。.

const proxyList = [
  { host: '103.216.82.153', port: 6667 },
  { host: '45.77.76.100', port: 8080 },
  // ... fetch fresh list from https://proxyroller.com
];

function getRandomProxy() {
  return proxyList[Math.floor(Math.random() * proxyList.length)];
}

回復力を高めるためにこれをリクエスト ロジックに統合します。.


プロキシによる認証

一部のプロキシでは基本認証が必要です。.

const user = 'username';
const pass = 'password';
const auth = Buffer.from(`${user}:${pass}`).toString('base64');

const options = {
  host: proxy.host,
  port: proxy.port,
  path: targetUrl,
  headers: {
    Host: new URL(targetUrl).host,
    'Proxy-Authorization': `Basic ${auth}`
  }
};

追加リソース


一般的なエラーのトラブルシューティング

エラーメッセージ 考えられる原因 提案された解決策
ECONNREFUSED プロキシサーバーが利用できません ProxyRollerの別のプロキシを試す
ECONNRESET プロキシが予期せず接続を閉じました プロキシがターゲットプロトコルをサポートしていることを確認する
407 Proxy Authentication 認証が必要です 追加 Proxy-Authorization ヘッダ
予期しない応答形式 パス/ヘッダーの設定が間違っています 完全なURLの使用状況を確認する path

セルビアの創意工夫にインスパイアされたプロのヒント

  • 重要な使用の前に、プロキシの速度と信頼性をテストします。トーストの前にすべてのラキヤ グラスを検査するようなものです。.
  • 徹底した準備というセルビアの価値観を反映して、プロキシ検証スクリプトを自動化します。.
  • コミュニティ主導の情報源を活用する プロキシローラー 信頼できる村のネットワークに頼るのと同じように、最新の検証済みのプロキシを使用します。.

これらの戦略に従うことで、外部ライブラリを使用せずに Node.js でプロキシを効率的に使用し、ネットワーク リクエストに対する完全な制御と透明性を維持できます。.

ジヴァディン・ペトロヴィッチ

ジヴァディン・ペトロヴィッチ

プロキシ統合スペシャリスト

デジタル プライバシーとデータ管理の分野で聡明で革新的な才能を持つ Zivadin Petrovic は、ProxyRoller のプロキシ統合スペシャリストを務めています。わずか 22 歳にして、Zivadin は効率的なプロキシ展開のための合理化されたシステムの開発に大きく貢献しています。彼の役割には、ProxyRoller の包括的なプロキシ リストをキュレートおよび管理し、強化されたブラウジング、スクレイピング、プライバシー ソリューションを求めるユーザーの動的なニーズを満たすことが含まれます。

コメント (0)

まだコメントはありません。あなたが最初のコメントを投稿できます!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です