このSuperAgentプロシキガイドでは、以下のトピックを取り上げます。
- SuperAgentとは何か、なぜプロキシが必要なのか。
- SuperAgentプロキシライブラリとは何か、なぜ必要なのか。
- SuperAgentでのHTTPプロシキ、HTTPSプロシキ、SOCKSプロキシの設定方法。
- プロキシ認証とローテーションの取り扱い方法。
SuperAgentとは何ですか? なぜプロキシが必要なのですか?
SuperAgentはJavaScriptアプリケーション向けの軽量で使いやすいHTTPクライアントです。その柔軟性により、フロントエンドアプリケーションやNode.jsアプリケーションでHTTPリクエスを実行する際の人気ライブラリとなっています。カスタムヘッダー、コンフィギュレーション、Cookie など、多くの機能を提供します。
なぜSuperAgentプロキシが求められるのですか?これを使用することでオンラインIDを保護し、匿名で目標を達成できるからです。プロキシ経由でリクエストを転送することで本来のIPアドレスを隠すため、目的のサーバーによるユーザー識別とブロックの困難さが増します。このように機密性レイヤーが追加されるため、IP接続の禁止や制限の回避に役立ちます。
Node Fetchプロキシガイド内の説明のようにNode Fetchでも同じ結果が得られ、またAxiosプロキシチュートリアル内の説明のようにAxiosでも同様であることにご注意ください。
superagent-proxyとは?
SuperAgentはプロキシをネイティブサポートしていません。プロキシサポートの重要性を考慮して、コミュニティは superagent-proxy
でこれを修正しました。このnpmパッケージは、HTTPプロシキ、HTTPSプロシキ、SOCKSプロキシの設定を可能にするために、superagentのリクエストクラスをプロキシ(uri)関数で拡張しています。つまり、superagent-proxy を使用すると、指定されたプロキシ経由でHTTPリクエストをプロキシできます。
舞台裏では、このライブラリにProxy Agentsプロジェクトが装備されており、このプロジェクトにはさまざまなプロトコルでプロキシを設定するためのHttp.Agent
実装されています。
SuperAgentでのプロキシ設定をsuperagent-proxy経由で実行
手順を追って説明するこのセクションでは、SuperAgentでのHTTP、HTTPS、SOCKSのプロキシー設定方法を紹介します。
前提条件
Node.jsプロジェクトが実装されているとします。まず、superagentとsuperagent-proxyのnpmパッケージを以下のようにプロジェクトの依存関係に追加します。
npm install superagent superagent-proxy
Node.jsスクリプトファイル内でsuperagent
関数をインポートし、これをsuperagent-proxy
で拡張します。
const superagent = require("superagent");
// extend the Request class from SuperAgent
// with the proxy() method
require("superagent-proxy")(superagent);
ESMユーザーの場合はこちらです。
import superagent from "superagent";
import superagentProxy from "superagent-proxy";
// extend the Request class from SuperAgent
// with the proxy() method
superagentProxy(superagent);
完璧です!ここからSuperAgentプロキシガイドに従って設定しましょう。
HTTPプロシキ、HTTPSプロシキ、SOCKSプロキシ
これはHTTP/HTTPS/SOCKSプロキシのURLシンタックスです。
[<PROXY_PROTOCOL>://]<PROXY_HOST>:<PROXY_PORT>
具体的なパラメーターは次のとおりです。
: HTTPプロキシでは「http」 、HTTPSプロキシでは「 https」 、SOCKSプロトコルでは「socks」、 「socks4」、「socks5」。省略した場合、通常はデフォルトで「http」になります。
: プロキシサーバーのIP、またはそのドメイン。
: プロキシサーバーが受信するポート。
たとえば、これを自分のHTTPプロキシのURLとします。
"http://207.2.120.19:88"
以下のようにSuperAgentでプロキシを使用できます。
try {
const proxyURL = "http://207.2.120.19:88";
const response = await superagent
.get("https://example.com")
.proxy(proxyURL);
// retrieve the JSON response from the request
// and print it
const jsonResponse = JSON.stringify(response.body);
console.log(jsonResponse);
} catch (e) {
console.error(e);
}
Or if you prefer a Promise-based approach:
const proxyURL = "http://207.2.120.19:88";
superagent
.get("https://example.com")
.proxy(proxyURL)
.end((err, res) => {
if (err) {
console.log(err);
} else {
const jsonResponse = JSON.stringify(res.body);
console.log(jsonResponse);
}
});
ご覧のように、superagent-proxy
が提供するproxy ()メソッドにプロキシURLを渡すだけで実行できます。これでSuperAgentが、proxyURLで指定されたHTTPプロキシサーバーを経由して、get()
へのパラメータとして指定URLにリクエストを送信します。
上記のSuperAgentプロキシ方法が機能することを完全実例で確認しましょう!
完全実例
プロキシサーバーのURLがない場合はオンラインで入手できます。これをご検討ください。
http://198.199.70.20:31028
これはHTTPプロキシですが、これから紹介する例はHTTPSプロキシやSOCKSプロキシでも動作することにも留意ください。
SuperAgentが指定されたプロキシ経由でリクエストをルーティングすることを確認するには、HttpBinプロジェクトの/ipエンドポイントをターゲットにします。この公開APIは受信リクエストのIPを返信します。したがって、すべてが見込みどおりに動作すると、HttpBin APIはプロキシサーバーのIPで応答するはずです。
完全なJavaScriptスニペットは次のようになります。
const superagent = require("superagent");
require("superagent-proxy")(superagent);
async function makeProxyRequest() {
try {
const proxyURL = "http://198.199.70.20:31028";
const response = await superagent
.get("https://httpbin.io/ip")
.proxy(proxyURL);
const jsonResponse = JSON.stringify(response.body);
console.log(jsonResponse);
} catch (e) {
console.error(e);
}
}
makeProxyRequest();
スクリプトを実行すると、次のように表示されるはずです。
{ "origin": "198.199.70.20" }
素晴らしい!このプロキシサーバーのIPが表示されると、この方法が見込みどおりに機能したことを表します。
この表現が意図的である点に注意してください。「表示される」ではなく、「表示されるはず」と表現している理由は、無料プロキシの寿命が非常に短いため、この記事を読む頃には選択したプロキシが動作しない可能性が大きいからです。
オンラインで入手した無料プロキシは学習目的で使用する分には問題ありませんが、実際に使用する場合には信頼に欠きます。その理由とは?無料プロキシは低速で、エラーが発生しやすく、信頼性に欠き、データを大量に消費し、短命だからです。不要な問題をすべて回避して楽に実行しましょう!
問題への対処方法は?業界大手プロバイダーであるBright Dataが提供するプレミアムプロキシがお勧めです。アカウントを作成し、信頼性の高いプロキシを無料でお試しください。
SuperAgentプロキシ:高度なユースケース
これでSuperAgentプロキシ統合の基本は押さえました。では、もっと複雑な手法はどうでしょうか?以下の章を読んで、superagent-proxyのエキスパートになりましょう。
環境変数でプロキシをグローバルに設定できるのか?
SuperAgentはグローバル設定をサポートしていませんが、superagent-proxyが内部でproxy-agentを使用することを思い出してください。proxy-agentパッケージでは使用するプロキシを決定する方法が2つあります。
- 渡されたURLをパラメーターとして使用します。
- これは
proxy-from-env
モジュールで定義された HTTP_PROXY 環境変数と HTTPS_PROXY 環境変数を読み取ります。
この場合は以下の環境を設定して、SuperAgentでグローバルプロキシを設定できます。
HTTP_PROXY
: HTTPリクエストに使用するプロキシサーバーのURL。HTTPS_PROXY
: HTTPSリクエストに使用するプロキシサーバーのURL。
たとえば、LinuxやmacOSでは次のコマンドを使用して設定します。
export HTTP_PROXY="[<PROTOCOL>://]<USERNAME>:<PASSWORD>@<HOST>[:<PORT>]"
export HTTPS_PROXY="[<PROTOCOL>://]<USERNAME>:<PASSWORD>@<HOST>[:<PORT>]"
次に、パラメーターなしで proxy ()
メソッドを呼び出します。
superagent
.get("https://example.com")
.proxy()
// ...
お見事です!SuperAgentがリクエストごとに環境変数で指定されたプロキシを使用します。
同じメカニズムがcURLのプロキシでも機能するため、詳細についてはリンクをクリックしてください。
superagent-proxyでのプロキシ認証
プロキシプロバイダーは認証を使ってサーバーを保護します。これにより、有効な認証情報を持つユーザーのみがプロキシサーバーにアクセスできるようになります。認証情報なしで保護されたプロキシに接続しようとすると、「407 プロキシ認証が必要です」というHTTPエラーが表示されます。
保護されたプロキシのURLを使う場合のシンタックスは次のとおりです。
[<PROTOCOL>://]<USERNAME>:<PASSWORD>@<HOST>[:<PORT>]
通常のプロキシのURLと酷似していますが、これには
と
が伴います。
この仕組みを深く理解するために1つ例を挙げましょう。以下の文字列が認証済みプロキシに接続するURLだとします。
http://admin:[email protected]:8080
URLのフィールドは次のようになります。
: HTTP
: admin
: PK5IO86NWP56L9SJU7
: 20.210.113.32
8391:
これを踏まえると、SuperAgentでプロキシ認証を処理する方法は2つです。
- プロキシURLで認証情報を直接指定する。
const proxyURL = "http://admin:[email protected]:8080"
superagent
.get("https://example.com")
.proxy(proxyURL)
// ...
- url-parse-likeオブジェクトでusernameとpasswordを設定する。
superagent
.get("https://httpbin.io/ip")
.proxy({
protocol: "http",
host: "20.210.113.322",
port: "8080",
username: "admin",
password: "pK5io86NWp56l9sju7"
})
素晴らしい!SuperAgentのプロキシ認証はもはや秘密ではありません。
SuperAgentのローテーションプロキシ
同じプロキシサーバーを繰り返し使用すると、ターゲットサイトがこのサーバーのIPアドレスをブロックする可能性があります。この問題を回避するために、リクエストごとに個別のプロキシサーバーからの送信を確保することが不可欠です。以下がその方法です。
- プロキシURLのリストを入力します。
- その中からリクエストごとにプロキシURLをランダムに選択します。
- 選択したプロキシURLをSuperAgentで設定します。
ただし、HTTPリクエストごとにこのロジックを管理するのは一苦労です。また、この方法では信頼できるプロキシサーバーのプールにアクセスする必要があり、これは有料です。幸いなことに、Bright Dataがソリューションを提供します!Birght Dataのローテーションプロキシが、自動的にリクエストごとの出口IPアドレスを変更します!Bright Dataのローテーションプロシキが接続するたびにIPアドレスを確実にリフレッシュします。これは195か国で利用可能なうえ、並外れたネットワーク稼働率を誇り、99.9%の成功率を保証します。
次の章では、SuperAgentでのBrigh Dataのローテーションプロキシの使い方を説明します。
SuperAgentとBright Dataプロキシの統合
Bright Data は世界最高水準のプロキシサーバーを管理しており、フォーチュン500 選出企業や20,000社以上の顧客にサービスを提供しています。世界中に広がるプロキシネットワークで、以下のようなプロキシが提供されています。
- データセンタープロキシ — 77万個以上のデータセンターIP。
- レジデンシャルプロキシ — 195か国以上で7,200万個を超える住宅用IP。
- ISPプロキシ — 70万個以上のISP用IP。
- モバイルプロキシ — 700万個以上のモバイル用IP。
総合的に見て、Birght Dataは世界で最大かつ高水準の信頼性を誇るプロキシネットワークの1つです。それでは、Bright DataのプロキシをSuperAgentに統合する方法を見て行きましょう。
すでにアカウントをお持ちの場合は、Bright Dataにログインしてください。アカウントがない場合は無料アカウントを作成してください。すると、次のユーザーダッシュボードにアクセスできるようになります。
次に[プロキシ製品を表示]ボタンをクリックします。
すると[プロキシとスクレイピングインフラストラクチャ]ページにリダイレクトされます。
下にスクロールして「住宅用プロキシ」カードを見つけたら、[開始]ボタンをクリックしてください。
すると、データセンタープロキシ設定ダッシュボードが表示されます。ソリューションに任意の名前を付け、必要に応じてプロキシサービスを設定します。プロキシの設定方法に不安がある場合は、年中無休のサポートにお問い合わせください。次に「追加」を押します。
最終的に、以下のようにプロキシのホスト名、ポート、ユーザー名、パスワードにアクセスできるようになります。
[ホスト]フィールドにはすでにポートが含まれていることに注意してください。
プロキシURLを作成してSuperAgentで使用するために必要な手順はこれだけです。すべての情報をまとめて、次のシンタックスでURLを作成します。
<Username>:<Password>@<Host>
たとえば、この場合は次のようになります。
brd-customer-hl_YYYYYYY-zone-datacenter_proxy1:@ZZZZZZZZZZbrd.superproxy.io:XXXX
Bright Dataとの統合用SuperAgentプロキシスニペットは以下のようになります。
const superagent = require("superagent");
require("superagent-proxy")(superagent);
async function makeBrightDataProxyRequest() {
try {
const proxyURL = "brd-customer-hl_YYYYYYY-zone-datacenter_proxy1:@ZZZZZZZZZZbrd.superproxy.io:XXXX";
const response = await superagent
.get("https://lumtest.com/myip.json")
.proxy(proxyURL);
const jsonResponse = JSON.stringify(response.body);
console.log(jsonResponse);
} catch (e) {
console.error(e);
}
}
makeBrightDataProxyRequest();
まとめ
このSuperAgentプロキシ統合チュートリアルでは、プロキシを使用する理由と、Superagent-proxyの使用方法について説明しました。これで、強力なJavaScript HTTPクライアントライブラリのSuperAgentでのHTTP、HTTPS、SOCKSのプロキシ設定方法をご理解いただけたと思います。ここでご覧いただたように、必要なのは数行のコードだけです。
このガイドでは無料のプロキシサービスを使用すべきでない理由を説明し、その代わりに市場大手プロバイダーのBright Dataが提供する信頼性の高いプロキシサーバーをお勧めする理由も説明しました。SuperAgentの統合手順は同じですが、有料プロキシのメリットは無限です。
クレジットカードは必要ありません