KYC不要 — IDもセルフィーも書類も不要。暗号通貨で支払い:BTC, USDT, USDC, ETH, SOL, LTC
言語: 日本語
今すぐ始める

プロキシエラーリファレンス · HTTPステータスコード

407 Proxy Authentication Required:意味と解決方法

HTTPステータスコード(4xx、クライアントエラー):各ツールでの正確なメッセージ、考えられる原因の順序、効果的な修正方法。

最終更新:

クイックアンサー

プロキシでの407 Proxy Authentication Requiredとは何を意味していますか?

407 Proxy Authentication Required は、認証情報がないか誤っているため、プロキシがリクエストを拒否したことを示します。ターゲットウェブサイトには一切接触していません。CrawlRelayの住宅用プロキシでは、ユーザー名がダッシュボードの表示通りか、パスワードが一致するか、どちらかに特殊文字がある場合はURLエンコードされているかの三点を確認してください。同じリクエストの再試行は407を解決しません。

407 Proxy Authentication Requiredを一目で理解する

エラー407 Proxy Authentication Required
タイプHTTPステータスコード(4xx、クライアントエラー)
送信元プロキシゲートウェイであり、ターゲットのウェブサイトではありません
定義されている場所RFC 9110, section 15.5.8 (headers: Proxy-Authenticate 11.7.1, Proxy-Authorization 11.7.2)
再試行しますか?いいえ。同じ認証情報では再度失敗します。まずそれらを修正してください
まず確認すること以下のcurlテストを、ベアユーザー名でターゲット指定パラメータなしで実行してください

407 Proxy Authentication Requiredとは何ですか?

407はプロキシから返されるもので、アクセスしたいサイトからではありません。RFC 9110では、これはプロキシ版の401であり、クライアントはまずプロキシで認証が必要であると説明されています。プロキシはProxy-Authenticateヘッダーを返し、その方式を示しますが、ほぼ常にBasicです。クライアントはProxy-AuthorizationヘッダーでBase64エンコードされたusername:passwordを返信します。

HTTPSターゲットの場合、407はトンネルを開くCONNECTリクエストに対して返ります。そのため、多くのライブラリがこれをトンネルや接続のエラーと報告し、HTTPステータスとは扱いません。ウェブサイトとのTLSセッションは開始されていません。

a 407はPython、curl、Node.js、ブラウザではどのように表示されますか?

同じ失敗でもツールごとに異なる表示になります。ログ検索用のメッセージは以下の通りです:

  • Python requests: ProxyError('Unable to connect to proxy', OSError('Tunnel connection failed: 407 Proxy Authentication Required'))
  • curl: curl: (56) CONNECT tunnel failed, response 407
  • Scrapy: TunnelError: Could not open CONNECT tunnel with proxy ... [{'status': 407, 'reason': b'Proxy Authentication Required'}]
  • Chrome、Playwright、Puppeteer: net::ERR_TUNNEL_CONNECTION_FAILED、または可視ブラウザのログインポップアップ
  • http://ターゲットでのNode.jsクライアント: Request failed with status code 407

a 407の原因は何ですか?

最も可能性が高いのは次の通りです:

  • ユーザー名またはパスワードの誤り。 タイプミス、リセット後の古いパスワード、別のサブユーザーの認証情報。
  • エンコードされていない特殊文字。 パスワードに@、:、/、#が含まれている場合、user:pass@host URLが壊れます。パーセントエンコードしてください:@は%40に、:は%3Aになります。
  • ターゲティングサフィックスが破損。 ユーザー名でターゲティングを読むゲートウェイは、長い一つのユーザー名として認識します。キーや国コードのタイプミスがあると、プロキシが認識しないユーザー名になります。
  • コードから出ない認証情報。 Chromeは--proxy-server内部のユーザー名とパスワードを無視します。Puppeteerにはpage.authenticate()が必要で、Seleniumにはローカルフォワーダーが必要です。
  • 残高不足。 トラフィックがまだ残っているか確認してください、コードのデバッグ前に。

a 407を段階的に診断するには?

  1. curlで認証情報をターゲティングなしでテスト(下記コマンド)。詳細出力にHTTP/1.1 407行があれば認証情報の問題です。
  2. ターゲティングパラメータを一つずつ戻し、それぞれテストを再実行します。
  3. プログラムが実際に構築したプロキシURLをパスワードを隠してログに取り、ダッシュボードのものと文字単位で比較します。
  4. curlは成功しプログラムが失敗する場合、ライブラリが認証情報を送れていません。以下のツール別対処を参照ください。
curlで失敗したURLをテストする(HTTPポート、詳細表示)
# Use the URL that fails; with https://api.ipify.org instead, you test the gateway alone.
# "HTTP/1.1 200 Connection established" first, then the site's own status: the site answered.
curl -v -x http://USERNAME:[email protected]:7777 https://TARGET_URL

# Same test through the SOCKS5 port, with DNS resolved at the exit
curl -v --socks5-hostname gw.crawlrelay.com:7778 --proxy-user USERNAME:PASSWORD https://TARGET_URL

a 407をどう修正しますか?

  • Pythonではurllib.parse.quote(value, safe='')、JavaScriptではencodeURIComponent()で認証情報をエンコードしてURLを作成してください。
  • ブラウザでは、Playwrightのproxyオプションにusernameとpasswordを渡し、Puppeteerでpage.authenticate()を呼び出し、Seleniumにはローカルフォワーダーを使います。PlaywrightとPuppeteer](/docs/puppeteer/)のガイドもご覧ください。
  • 環境変数にHTTPS_PROXYを設定する場合は、シェルで全体を引用符で囲み、@と$が残るようにしてください。
  • 漏洩が疑われる場合はダッシュボードでパスワードをローテーションし、関連するすべてのスクレイパーを更新してください。
Python:エンコードされた認証情報を使ってプロキシURLを作成する
from urllib.parse import quote

import requests

user = "USERNAME-country-us"
password = "p@ss:word/1"  # example containing special characters

# safe="" also encodes "/", "@" and ":" inside the credentials
proxy = "http://{}:{}@gw.crawlrelay.com:7777".format(
    quote(user, safe=""), quote(password, safe="")
)
proxies = {"http": proxy, "https": proxy}  # http:// for both keys

r = requests.get("https://api.ipify.org", proxies=proxies, timeout=(10, 30))
print(r.status_code, r.text)
Playwright(Python):認証情報を別々のフィールドにする
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        "server": "http://gw.crawlrelay.com:7777",
        "username": "USERNAME-country-us",
        "password": "PASSWORD",
    })
    page = browser.new_page()
    response = page.goto("https://api.ipify.org")
    print(response.status, page.inner_text("body"))
    browser.close()

a 407の後に再試行すべきですか?

407を自動で再試行しないでください。認証情報が同じであれば同じ答えが返り、連続したループはログを埋めるだけです。407は設定エラーとして扱い、ジョブを停止して認証情報を修正の上再起動してください。数日間正常だったジョブで突然407が出た場合、パスワードが変わったかサブユーザーが無効化されています。

407 Proxy Authentication RequiredはCrawlRelayにどう関係しますか?

CrawlRelayのゲートウェイは新規コネクションごとにユーザー名とパスワードを読み取ります。ターゲティングとセッション設定はユーザー名に存在するため、有効なパスワードでもサフィックスが壊れていると失敗します。ユーザー名はヘルパー関数一つで構築し、起動時に一度出力ログを取ってください。クイックスタートページには正確な書式があります。

ゲートウェイ:gw.crawlrelay.com、ポート7777(HTTP、HTTPSはCONNECT経由)、ポート7778(SOCKS5)。ユーザー名形式:USERNAME-country-{cc}-state-{state}-city-{city}-zip-{zip}-asn-{asn}-session-{id}-ttl-{minutes}。関連情報:401 vs 407 · ERR_TUNNEL_CONNECTION_FAILED · プロキシに接続できません。

407 Proxy Authentication Required:開発者がよく尋ねる質問

407は私がスクレイピングしているウェブサイトから送信されますか?

いいえ。407は常にあなたとウェブサイトの間に介在するプロキシから送信されます。リクエストはウェブサイトに到達していないため、トラフィックを検知したりカウントしたり遮断したりすることはありません。ウェブサイトがログインを望む場合は401を返します。プロキシの認証情報を修正すれば407は消えます。

curlが同じプロキシで動くのに私のコードはなぜ407になるの?

あなたのライブラリが認証情報を送信していないか、異なる形式で送っています。主な原因は、ブラウザのフラグにタイプされた認証情報が無視されている、特殊文字が失われた環境変数、URLエンコードされていないパスワードです。実際にコードが作成するプロキシURL(パスワードは伏せる)を表示し、curlコマンドと比較してください。

407は私のプランのトラフィックを使いますか?

407応答は数百バイトで、リクエストはターゲットに到達しないためページはダウンロードされません。コストがかかるのは別の部分で、407のリトライループに陥ったスクレイパーが時間を浪費しログを埋めます。エラー処理では407を停止点にしてください。

他のプロキシエラーのリファレンス

HTTPステータスコード

ブラウザとクライアントのエラー

接続とTLSエラー

失敗ケースを網羅したドキュメント付きレジデンシャルプロキシ

$0.50/GB発のCrawlRelayレジデンシャルプロキシ、期限切れがないトラフィック。

$0.50/GBから · KYC不要

今すぐ始める