01プロキシのユーザー名はどう読む?
プロキシのユーザー名は、ハイフンでつないだ部分から成る短い設定文字列です。userで始まり、そのあとに出口の場所やIPを保つ時間を決める名前と値の組を続けます。各部分の意味がわかれば、ダッシュボードを開かなくても接続文字列を手で書けます。
countryのあとには小文字2文字の国コードが続きます。user-country-usはアメリカのIP、user-country-jpは日本のIPという意味です。cityのあとには小文字の都市名が続き、空白はアンダースコアに置き換えます。例:user-country-us-city-new_york。
sessionのあとには自分で決めたセッション名が続きます。user-country-jp-session-shop1とすると、その名前を使うリクエストはすべて最大120分間同じIPを保ちます。user-type-mobile-country-gbのようにtype-mobileを加えると、モバイルIPから接続します。
パスワード欄には常にpt_で始まるアクセストークンを入れます。場所やセッションを変えたいときはユーザー名だけを編集し、トークンはそのままにします。
- userは設定の始まりを示します。
- countryと2文字のコードで国を選びます。
- cityとアンダースコア入りの名前で都市を選びます。
- sessionと名前で同じIPを保ちます。
- type-mobileでモバイルIPを選びます。
02HTTPプロキシとSOCKS5プロキシ、どちらを使うべき?
Webスクレイピングやブラウザ作業ならHTTPプロキシが手軽な標準で、Web以外の通信やDNSをプロキシ側で解決したい場合はSOCKS5プロキシが向いています。ProxyTooは一つのゲートウェイgate.proxytoo.com:7000で両方に対応しています。ユーザー名とトークンはそのままで、アドレス先頭のスキームだけを変えてください。
HTTPプロキシはWebリクエストのために作られたため、ほぼすべてのライブラリとブラウザがそのまま扱えます。プロキシが接続用に暗号化トンネルを開くので、HTTPSサイトも問題なく使えます。requests、Scrapy、Puppeteer、PlaywrightのようなWebツールでは、まずHTTP形式から始めましょう。
SOCKS5は接続そのものを中継するため、Web以外のさまざまな通信も運べます。Pythonではアドレスをsocks5hで始めると、ホスト名の解決が出口の国で行われ、位置情報の一貫性が保たれます。Chromium系ブラウザはユーザー名付きSOCKS5への対応が限られているため、ブラウザ自動化にはHTTPのほうがスムーズです。
- Webスクレイピングとブラウザ自動化にはHTTP
- Web以外の通信を送るプログラムにはSOCKS5
- プロキシの国でDNSを解決するならsocks5hアドレス
- どちらも同じユーザー名とトークン
03ブラウザやアンチディテクトブラウザにプロキシを追加するには?
通常のブラウザでは、プロキシ拡張機能を開き、ホスト、ポート、ユーザー名、トークンの4つの値をそれぞれの欄に入力します。ダッシュボードの「接続情報を作成」でhost:port:user:pass形式を選ぶと、4つの値が1行にまとまって表示され、欄ごとにそのままコピーできます。最初のページ読み込みで認証画面が出たら、そこにユーザー名とトークンを入力してください。
アンチディテクトブラウザはプロファイルごとに独立したブラウザ環境を持つため、基本は1プロファイルにつき1ユーザー名です。プロファイルのプロキシ欄でHTTPかSOCKS5を選び、ユーザー名にsession部分を加えて、プロファイルごとに異なるセッション名を付けます。これで各プロファイルが自分専用のIPを持ち、そのプロファイル内ではIPが変わりません。
プロファイルの言語、タイムゾーン、位置情報を選んだ国に合わせると、現地の訪問者と同じようにページが表示されます。一つのアカウントを長期間運用するプロファイルには、期間中ずっと同じIPを保つISPプロキシか専用データセンタープロキシが適しています。どちらもダッシュボードの「商品を購入」で数量と期間を選んで注文できます。
- プロファイルごとに一つのセッション名
- 言語とタイムゾーンをIPの国に合わせる
- 長期運用のプロファイルにはISPプロキシ
- 認証画面にはユーザー名とトークン
04Python requestsとScrapyでプロキシを使うには?
Pythonでは、プロキシをhttp://username:token@gate.proxytoo.com:7000という形の1行にまとめ、ライブラリのプロキシ設定に渡します。requestsでのポイントは、httpとhttpsの両方の項目に同じアドレスを入れることです。両方を埋めることで、HTTPSリクエストもプロキシ経由で送られます。
requestsのSessionオブジェクトにプロキシを一度設定すれば、そのセッション内のすべてのリクエストに適用されます。リクエストごとに新しいIPがほしいときは国だけのユーザー名を、ログインのように続きのある流れにはsession部分付きのユーザー名を使います。SOCKS5を使う場合は、requestsのSOCKS用追加パッケージを入れ、アドレスの先頭をsocks5hに変えてください。
Scrapyでは、各リクエストのmetaのproxy値に同じ形式のアドレスを入れると、組み込みのプロキシミドルウェアがユーザー名とトークンを認証ヘッダーに変換してくれます。すべてのリクエストに一つの設定を適用するなら、proxy値を埋める小さなダウンローダーミドルウェアを書きます。通信をセッションに分けたい場合は、そのミドルウェアでリクエストのまとまりごとに異なるセッション名を割り当てます。
並列数と間隔はCONCURRENT_REQUESTSやDOWNLOAD_DELAYなどの設定で調整します。低めの値から始め、応答が安定しているのを確認してから少しずつ上げると、速度と成功率のバランスが取れます。住宅用プロキシは使った通信量で課金されるため、画像やフォントを除外すると残高が長持ちします。
05Node.js、Puppeteer、Playwrightでプロキシを設定するには?
Node.jsでは、プロキシエージェントを作成してリクエストライブラリに渡すのが一般的です。HTTPならhttps-proxy-agentやundiciのProxyAgent、SOCKS5ならsocks-proxy-agentなどのパッケージを使い、ユーザー名とトークンを含むアドレスを渡します。エージェントは一度作ってリクエスト間で使い回すと、接続が再利用されて速さを保てます。
Puppeteerでは、起動引数--proxy-serverにはゲートウェイのアドレスだけを渡し、ページを開いたあとpage.authenticateでユーザー名とトークンを別に送ります。このように分けるのがChromeで最も確実な設定です。国やセッションを切り替えるなら、新しいユーザー名で別のブラウザを起動するのが一番簡単です。
Playwrightでは、起動オプションproxyにserver、username、passwordを設定すれば、認証が一度で済みます。password欄にはアクセストークンを入れます。ブラウザを一つ起動してコンテキストごとに別のプロキシを設定することもでき、コンテキストごとにセッション名を一つずつ割り当てれば、一つのスクリプトで複数のIPを並行して使えます。
ブラウザ自動化ではページごとに画像、動画、フォントをダウンロードするため、通信量がかさみます。リクエストのインターセプトで不要なリソースをブロックすると、GB単位で課金される住宅用プロキシやモバイルプロキシの費用を抑えられます。セッション名を加えるとページの読み込み中にIPが変わらず、ページがきれいに表示されます。
06ローテーションプロキシと固定セッション、スクレイピングにはどちらがいい?
ページを一つずつ単独で読むスクレイピングにはリクエストごとの新しいIPを、ログインやカートのように続きのある流れにはセッションを使います。session部分がなければリクエストごとにIPが変わり、あればその名前のもとで同じIPが保たれます。一つのトークンで両方に対応するので、作業の段階ごとに選べます。
ローテーションは、検索結果、商品一覧、価格表のように、ページ同士につながりのない作業に向いています。リクエストが多数のIPに均等に分散されるため、サイトからは多くの訪問者による普通のアクセスに見えます。一つのサイトを大規模にクロールする場合でも、リクエストの間隔を空ければ安定して進められます。
セッションを使うコツは、作業の単位ごとに別のセッション名を付けることです。5つのストアアカウントを確認するなら、shop1からshop5と名付ければ、アカウントごとに専用のIPが保たれます。作業をセッションの有効時間内に終わる短い流れに分ければ、流れ全体を一つのIPで通せます。
1か月まるごと同じIPが必要ならISPプロキシか専用データセンタープロキシが最適で、低い単価で大量に使うなら共有データセンタープロキシやIPv6プロキシが良い選択です。国が混在しても構わない大容量の作業には、1日$37.58の無制限住宅用プロキシを使うと費用の見通しが立てやすくなります。
- 独立したページにはリクエストごとに新しいIP
- ログインや決済の流れにはセッション名を固定
- 作業の単位ごとに別のセッション名
- 1か月同じIPならISPか専用データセンター
07プロキシのIPを確認し、接続エラーを直すには?
最も早い確認方法は、プロキシ経由でIPを表示するページにリクエストを送り、IPと国がユーザー名の国と一致しているかを見ることです。ダッシュボードの「接続情報を作成」でcurl形式を選ぶと、ターミナルに貼り付けるだけの確認コマンドが用意されます。セッションを設定した場合は、同じコマンドを2、3回送ってIPが保たれているか確かめてください。
407の応答は、プロキシが認証情報を受け付けなかったという意味で、たいていはユーザー名かトークンの1文字の違いが原因です。トークンがpt_で始まっているか、コピー時に空白や改行が入っていないか、ユーザー名がuserで始まっているかを確認してください。1行のアドレスに特殊文字が含まれる場合は、URLエンコードすれば解決します。
403や429のような応答はサイト側から返されたもので、プロキシ接続自体は成功しており、サイトがリクエストの速度やパターンを見ているということです。リクエストの間隔を空け、ブラウザに近いヘッダーを送り、セッションからリクエストごとの新しいIPに切り替えてください。
タイムアウトの原因は、会社や学校のネットワークがゲートウェイのポートをブロックしている、都市の指定が狭すぎる、コードのタイムアウトが短いといったことがよくあります。別のネットワークから同じコマンドを試し、city部分を外して国だけを指定し、リクエストのタイムアウトを長くしてみてください。あわせて残高が残っているか、IP商品の場合は「注文履歴」で注文が「使用中」になっているかも確認しましょう。
- 407ならユーザー名とトークンを確認
- 403や429なら速度を落としてIPをローテーション
- タイムアウトならネットワーク、都市、タイムアウト値を確認
- セッションのテストは同じコマンドを数回実行
08プロキシのアクセストークンを安全に保つには?
アクセストークンはアカウントIDであると同時にプロキシのパスワードでもあるため、持っている人なら誰でもあなたの残高でプロキシを使えてしまいます。サーバーにはトークンのハッシュしか保存されないので、登録時に保存したトークンファイルが唯一の原本になります。2か所にコピーを置き、パスワードマネージャーにも登録しておけば、安全で見つけやすくなります。
トークンはコードに書かず、環境変数や別の設定ファイルから読み込みましょう。その設定ファイルを.gitignoreに加えてリポジトリに入らないようにし、共有サーバーではファイルの権限を絞って自分だけが読めるようにします。こうすればコードは共有しても、トークンは自分のマシンにだけ残ります。
ログやスクリーンショットにも注意してください。エラー時にプロキシのアドレスを丸ごと出力すると、トークンがそのままログに書き込まれるため、アドレスをログに残すときは必ずトークン部分を伏せます。質問やスクリーンショットを投稿するときは、ユーザー名だけを見せ、トークンは先に消しておきましょう。
- トークンファイルは2か所に保存
- トークンは環境変数から読み込む
- 設定ファイルはリポジトリに入れない
- ログとスクリーンショットではトークンを伏せる