407 Proxy Authentication Required の解決方法
更新日:
407 エラーは、見かけほど深刻な問題ではありません。デバイスはプロキシに到達できており、ネットワーク経路自体は開通しています。プロキシ側が有効なユーザー名とパスワードを受信できなかったことを示しているに過ぎません。そのため、407 エラーのほぼすべては、ルーターやファイアウォールの設定ではなく、認証情報の見直しによって解決できます。
407 エラーの主な原因(発生頻度順)
- ユーザー名やパスワードの誤り・未入力。 1文字の打ち間違いや、パスワードと一緒に末尾の空白をコピーしてしまうケースです。407 が報告される原因の大半はこれに該当します。
- 入力欄の取り違え。
ip:port:user:passを丸ごとホスト欄に入力してしまったり、パスワード欄にユーザー名を入れてしまったりするケースです。ツールによっては自動で4つのフィールドを分割してくれますが、手動入力が必要なツールもあります。 - アプリが認証情報を送信していない。 OS のプロキシ設定では、アドレスとポート番号しか保存されません。パスワードの入力ダイアログを表示できないアプリの場合、認証ヘッダーなしで接続して 407 が返されることがあります。
- プロキシ URL 内の特殊文字。
http://user:pass@host:port形式では、パスワードに含まれる@、:、#などの文字をパーセントエンコード(@は%40に変換)する必要があります。エンコードしないと文字列が正しく認識されません。
407 エラーの実際の表示例
テスト用プロキシ(ドキュメント用アドレス 203.0.113.10:8080、意図的に誤った認証情報 user123:pass456)でエラーを再現しました。HTTPS サイトに対して curl -x http://user123:[email protected]:8080 https://example.com を実行すると、curl: (56) CONNECT tunnel failed, response 407 と出力されます。HTTP サイトに対して -w %{http_code} を付けて実行した場合は、単に 407 と表示されます。
-v オプションを追加すると、認証情報が送信されているか確認できます。トレースには > CONNECT example.com:443 HTTP/1.1 に続いて > Proxy-Authorization: Basic ... が表示され、その後に 407 が返されます。Proxy-Authorization の行がない場合、クライアントは認証情報を一切送信していません。
VinaProxy の proxy checker では、同様のケースが auth failed (407) と表示されます。ログインダイアログのないヘッドレス Chrome では ERR_TUNNEL_CONNECTION_FAILED として現れます。詳細は tunnel error page をご確認ください。
環境別の解決策
- Windows と Chrome: Chrome は Windows のプロキシ設定(「設定」>「ネットワークとインターネット」>「プロキシ」)に従いますが、ここにはアドレスとポートしか保存されません。初回ページ読み込み時に Chrome はプロキシのユーザー名とパスワードを求めるサインインダイアログを表示します。入力を誤ってダイアログが再表示されない場合は、Chrome のウィンドウをすべて閉じてから再起動してください。
- アンチディテクトブラウザ(AdsPower、GoLogin、GenLogin): ホスト、ポート、ユーザー名、パスワードを個別のフィールドに入力してください。パスワード欄は編集するのではなく、一度すべて消去してから貼り付け直します。各項目の設定手順は GoLogin setup guide に記載しています。
- スマートフォン: iPhone の場合は「設定」>「Wi-Fi」>「(i)」>「プロキシを構成」内に「認証」スイッチがあり、これがオフになっていると 407 が発生します。Android は通常ホストとポートしか受け付けないため、ログインが必要なアプリでは一般的な接続エラーが表示されることがあります。
- curl: URL に認証情報を直接埋め込むのではなく、
-U "user:pass"として個別に渡すことで、特殊文字に起因する問題を回避できます。 - Python requests:
proxies辞書のhttpとhttpsの両方のキーにhttp://user:pass@host:portを指定し、特殊文字を含むパスワードはurllib.parse.quoteでエンコードしてください。
認証情報が正しいにもかかわらず 407 が解消しない場合
次にプロトコルを確認してください。VinaProxy ではユーザー名・パスワード認証に対応した HTTP(S) プロキシと SOCKS5 プロキシを提供しています。ダッシュボードのご注文内容に記載されているプロトコルを選択してください。チェッカーで not socks5 と返される場合、そのポートは HTTP 通信専用であり、SOCKS5 として設定することはできません。
手順
- 1
ダッシュボードからプロキシ情報をコピーする
VinaProxy ダッシュボードでご注文内容を開き、手入力せずにプロキシ情報の一行全体をコピーします。
- 2
プロキシチェッカーで確認する
proxy checker に貼り付けてテストします。結果が
auth failed (407)であれば、ネットワークの問題ではなく認証情報に原因があることが確認できます。 - 3
ユーザー名とパスワードを正しく再入力する
ご利用のソフトウェアで両方のフィールドを完全にクリアし、前後に余分な空白が入らないよう注意して貼り付け直します。
- 4
注文内容とプロトコルを一致させる
プロキシの種類をご注文内容の記載どおりに HTTP または SOCKS5 に設定し、保存します。
- 5
解消しない場合は curl -v でトレースする
実際の値を使用して
curl -vを実行し、407 が返される前にProxy-Authorizationの行が存在するか確認します。
よくある質問
407 はプロバイダー(ISP)によるプロキシのブロックが原因ですか?
いいえ。407 はプロキシサーバー自体から返されているため、接続経路は通っています。アクセス経路が遮断されている場合は、タイムアウトや接続拒否として表示されます。詳細は proxy timeout をご覧ください。
Chrome でプロキシのログイン画面が何度も繰り返し表示されるのはなぜですか?
入力情報が誤っていると再度 407 が返され、Chrome が再入力を促すためです。CapsLock が有効になっていないか確認し、ベトナム語入力などの IME によってパスワードにアクセント記号などが混入していないか確認してください。
@ を含むパスワードをプロキシ URL に含めるにはどうすればよいですか?
URL エンコードを行ってください。@ は %40、: は %3A、# は %23 に変換します。curl の場合は -U オプションを使用すれば、エンコード不要でそのまま指定できます。
Selenium や Puppeteer で 407 ではなくトンネルエラーが表示されます。同じ原因ですか?
ほとんどの場合、同じ原因です。ヘッドレス Chrome はログインダイアログを表示できないため、407 エラーが ERR_TUNNEL_CONNECTION_FAILED として発生します。Selenium guide を参考に、ライブラリの認証機能を利用して資格情報を渡してください。
設定がわかりやすい専用プライベートプロキシ
VinaProxy では、コピーして貼り付けるだけですぐに使える ip:port:user:pass 形式のプロキシ情報をご提供しています。
プロキシの料金プランを見る