レジデンシャルプロキシへの接続は本来5分で終わる作業ですが、あるプロバイダーのドキュメントが別のプロバイダーの慣習を前提にしているせいで、しばしば午後いっぱいかかってしまいます。可動部分はホスト、ポート、ユーザー名、パスワードの4つしかありません。プロバイダー間で異なるのは、ユーザー名にどれだけの意味が詰め込まれているかという点で、このようなゲートウェイではほぼすべてがそこに集約されています。
以下では、そのフォーマット、各部分の役割、そして何かおかしいときにエラーをどう読み解くかを説明します。
4つの構成要素
| 部分 | 値 |
|---|---|
| ホスト | p.shifter.io |
| ポート | 443 |
| ユーザー名 | customer-USERNAME にオプションのターゲティングフラグを付加 |
| パスワード | パネルから取得 |
ホストとポートは変わりません。国が変わっても、セッションを固定しても、HTTPの代わりにSOCKS5を使っても同じです。すべてのリクエストは同じエンドポイントに送られ、何を求めているかはユーザー名で表現されます。これが理解すべき最も重要な点です。なぜなら、これは各設定が別々のアドレスを意味していた、ポートベースの旧来型製品とは大きく異なるからです。
HTTP(S)もSOCKS5も同じホストとポートに対して通信します。認証情報はResidential Proxies配下のパネルにあります。
最もシンプルなリクエスト
まずはここから始め、何かを追加する前に動作を確認してください。
curl -x customer-USERNAME:PASSWORD@p.shifter.io:443 https://ipinfo.io/json
これにより、割り当てられた出口アドレスを記述したJSONが返ってきます。2回実行すると、ローテーションがデフォルトであるため、2つの異なるアドレスが表示されるはずです。これが動作すれば、認証情報は正しく、残りはすべて設定の問題です。
ユーザー名へのターゲティング追加
フラグはハイフンでユーザー名に付加されます。順序は関係なく、値は小文字で、複数語の値にはアンダースコアを使います。
customer-USERNAME # ローテーション、地域指定なし
customer-USERNAME-country-de # ドイツの出口
customer-USERNAME-country-us-city-new_york # 都市レベル
customer-USERNAME-country-us-asn-7922 # 特定のネットワーク
customer-USERNAME-sid-abc123 # セッション固定
customer-USERNAME-sid-abc123-ttl-600 # 10分間のセッション固定
customer-USERNAME-country-gb-sid-abc123-ttl-600 # 組み合わせ
国コードはISO 3166-1 alpha-2であるため、イギリスはukではなくgbとなります。これは最もよくあるタイプミスです。sidは任意の文字列を選んで指定でき、以降のリクエストで同じ出口アドレスを保持します。ttlは秒単位の保持時間を設定するもので、sidと併用した場合のみ有効で、デフォルトは120です。詳細はgeo-targeting docsとsessions docsに、概念的な違いはsticky versus rotatingにあります。
もう一つ有用な点として、デフォルトでは、その時点で非常に狭いフィルターに一致するものが何もない場合、ゲートウェイはより広いプールにフォールバックし、リクエストが完了するようにします。正確な地域一致がリクエストの成功よりも重要な場合はstrict-trueを追加してください。その場合、暗黙のフォールバックの代わりに502が返されます。
遭遇する2つのフォーマット
プロキシの認証情報は2通りの書き方があり、両者間の変換でつまずく人がいます。
URL形式、ほとんどのライブラリやcurlで使われます。
http://customer-USERNAME-country-de:PASSWORD@p.shifter.io:443
コロン区切り形式、多くのデスクトップツールやブラウザ拡張機能で使われ、通常は各部分を別々のフィールドに入力するよう求められます。
p.shifter.io:443:customer-USERNAME-country-de:PASSWORD
両者は同一の情報を持ちます。ツールが4つのフィールドを求める場合は後者のレイアウトを、1つの文字列を求める場合は前者を使ってください。
コードでの利用
import requests
USER = "customer-USERNAME-country-de"
PROXY = f"http://{USER}:PASSWORD@p.shifter.io:443"
r = requests.get("https://ipinfo.io/json",
proxies={"http": PROXY, "https": PROXY}, timeout=20)
print(r.json())
httpとhttpsの両方のエントリを設定してください。片方だけを設定することが、「一部のリクエストは動作するが他は動作しない」というよくある原因になります。通常のリクエストとセキュアなリクエストでは経路が異なるためです。
パスワードに@、:、/、#といったURL上で意味を持つ文字が含まれる場合は、埋め込む前にパーセントエンコードしてください。そうしないとURLが誤って解析され、完全に正しい認証情報にもかかわらず認証エラーが発生します。
SOCKS5の場合は、同じホスト、ポート、認証情報を維持したままスキームだけを変更してください。ローカルではなくプロキシ側でホスト名を解決するバリアントを使用してください。もう一方はDNSを漏洩させ、地域的に誤った結果を返すことがあり、これはpreventing DNS leaksで解説されています。
その他のスタック向けの動作する設定はintegrations docsに、Python固有の内容はusing residential proxies with Pythonにあります。
エラーの読み方
ほぼすべての設定問題は4つのレスポンスでカバーされ、それぞれが異なる箇所を指し示します。
**407 Proxy Authentication Required**は、ゲートウェイが認証情報を拒否したことを意味します。認証情報が間違っているか、ユーザー名内のフラグが不正な形式になっている可能性があります。認識されない値があると、ユーザー名全体が解析不能になるためです。まずすべてのフラグを外し、素のユーザー名でテストしてください。それで動作すれば、問題はフラグ側にあるので、一つずつ戻して原因を特定できます。詳細な診断手順はfixing 407 and credential errorsにあります。
**502 Bad Gateway**は、認証情報は問題ないが、その時点でフィルターに一致するものがなかったことを意味します。フィルターを広げるか、都市指定から国指定に落とすか、strict-trueを外してください。
**509 Bandwidth Limit Exceeded**は、プランの割り当てが使い切られ、超過利用が無効になっていることを意味します。接続自体には問題ありません。
接続拒否またはタイムアウトは、そもそもゲートウェイに到達していないことを意味します。旧式のポートベースのホストではなくp.shifter.io:443を指定しているか確認し、プロキシの問題と決めつける前にnc -vz p.shifter.io 443で生の接続性をテストしてください。
実際に動作しているかの検証
最初に一度実行しておく価値のある2つのチェックがあります。
ローテーションの確認: sidなしで同じリクエストを何度か送信し、アドレスが変わることを確認してください。変わらない場合、通常の原因はプロキシがローテーションに失敗しているのではなく、HTTPクライアントが1つの接続を再利用していることにあります。これはIP not rotatingで解説されています。
地域の確認: 国を指定してリクエストし、返されたアドレスがその地域にジオロケーションされることを確認してください。さらに意味のある確認としては、地域に敏感なターゲットが、あたかも自分がそこにいるかのように振る舞うかどうかです。より詳しい方法はtesting speed, success rate and location accuracyにあります。
結論
ホストは1つ、ポートは1つ、それ以外はすべてユーザー名に含まれます。まず素のリクエストを動作させ、その後ターゲティングフラグを一つずつ追加してください。国コードはISOであるため、イギリスはgbであることを忘れないでください。HTTPとHTTPSの両方のプロキシエントリを設定し、特殊文字を含むパスワードはパーセントエンコードし、その方式を選ぶならリモートで解決するSOCKS5バリアントを使ってください。何かが失敗した場合、ステータスコードがどこを見るべきかを教えてくれます。407は認証情報または不正な形式のフラグ、502は該当するものがないフィルター、509は帯域幅、接続拒否はそもそもゲートウェイと通信できていないことを意味します。
そのゲートウェイはresidential proxiesへの入り口であり、そこでは国、都市、ASN、セッションがすべて同じ接続上のパラメータであり、GB単位で課金されるため、設定を変えても支払う金額は変わりません。これらすべてが初めての方は、residential proxies for beginnersから始めてください。