言語を変更
日本語 English Русский Deutsch Español Français Italiano Українська Tiếng Việt Türkçe Bahasa Indonesia हिन्दी 中文
メニュー
料金
プロキシ
プロキシの種類
地域から探す77の地域
ソリューション
リソース

Python requestsでプロキシを使う方法

requestsの通信先を1つの静的ISPアドレスに向けます。名前の分かるインターネット事業者のネットワーク上にある1つのIPで、お支払いいただいた期間中ずっと同じです。下のコードは、公開前に認証付きプロキシで実際に動かしたものです。

要点: httpとhttpsの両方のキーを持つproxies辞書を渡し、どちらにもhttp://USERNAME:PASSWORD@HOST:PORTを設定すると、requestsはその呼び出しをプロキシ経由で送ります。HTTPSの宛先へはトンネルとしてプロキシを通ります。SOCKS5の場合は、requests[socks]をインストールし、注文でプロキシをSOCKS5に切り替えて、socks5hスキームを使います。こうすると、ホスト名の名前解決はお客様のマシンではなくプロキシが行います。

Python requestsは、宛先URLのスキームとプロキシURLを対応づけた辞書からプロキシを読み取ります。このガイドでは、1つの静的ISPアドレスのためにその辞書を設定し、辞書を置ける3つの場所を示します。呼び出し、セッション、環境変数です。

ユーザー名とパスワードを使うPython requestsのプロキシ

当社のものを含め、ほとんどのプロキシはユーザー名とパスワードを求めます。requestsはそれをプロキシURLから読み取り、接続のたびにプロキシへ送ります。HTTPSの宛先に対しては、プロキシはトンネルを開くだけで、リクエストの中身を見ることはありません。コードのタブには、リクエストごとの形とセッションの形があります。

Python requestsでプロキシを設定する

  1. 注文から4つの値をコピーする

    ホスト、ポート、ユーザー名、パスワードです。ダッシュボードの「マイプロキシ」か、APIの注文情報から取得します。4つの値はアドレスごとに別々で、共有のゲートウェイはありません。

  2. プロキシURLを1つ組み立てる

    http://USERNAME:PASSWORD@HOST:PORTです。パスワードに/、?、#、%が含まれる場合は、先にurllib.parse.quote(password, safe="")でURLエンコードしてください。

  3. 両方のスキームに設定する

    httpキーとhttpsキーに同じURLを渡します。httpだけを設定すると、HTTPSのリクエストはすべてプロキシを通らず、お客様自身のアドレスから送られます。

  4. 送信元アドレスを一度確認する

    呼び出し元のIPを表示するページにリクエストを送るか、同じプロキシ経由でWhat Is My IPを開き、購入したアドレスになっていることを確かめます。

  5. タイムアウトを付けてジョブを実行する

    必ずtimeout=を渡してください。requestsは既定では無期限に待つため、接続が止まるとスクリプトが固まったように見えます。

import requests

# The four values come with your order (dashboard or API)
proxy = "http://USERNAME:PASSWORD@HOST:PORT"

response = requests.get(
    "https://example.com/",
    proxies={"http": proxy, "https": proxy},
    timeout=30,
)
response.raise_for_status()
print(response.status_code)
import requests

proxy = "http://USERNAME:PASSWORD@HOST:PORT"

with requests.Session() as session:
    # HTTP_PROXY / HTTPS_PROXY in the environment would override
    # session.proxies; this makes the session use only its own setting.
    session.trust_env = False
    session.proxies.update({"http": proxy, "https": proxy})
    response = session.get("https://example.com/", timeout=30)
    response.raise_for_status()
    print(response.status_code)
# pip install "requests[socks]"
import requests

# Switch the proxy to SOCKS5 first; use the values the order then shows.
# socks5h: the proxy resolves the hostname, not your machine.
proxy = "socks5h://USERNAME:PASSWORD@HOST:PORT"

response = requests.get(
    "https://example.com/",
    proxies={"http": proxy, "https": proxy},
    timeout=30,
)
response.raise_for_status()
print(response.status_code)

requestsの検証済みコード

どのサンプルも、ユーザー名とパスワード付きのHTTPプロキシで接続します。例外はSOCKS5のサンプルで、先にプロキシをSOCKS5に切り替える必要があります。切り替えると、注文に新しいポートと新しい認証情報が表示されるので、それを使います。4つの大文字の部分を、お客様の注文の値に置き換えてください。

APIドキュメント全体

requestsでプロキシを設定できる場所

requestsのドキュメントをもとに、このページのコードサンプルをローカルの認証付きプロキシで動かして確認しました。複数を設定した場合、呼び出しのproxies引数が環境変数より優先され、環境変数はSession.proxiesより優先されます。ただし、Sessionのサンプルのようにセッションでtrust_envをFalseにした場合は除きます。
適用範囲認証情報使う場面
呼び出しのproxies=その1回のリクエストURLの中呼び出しが数回だけのスクリプト
Session.proxiesセッションのすべてのリクエストURLの中それより長い処理。trust_envをFalseにして使う
HTTP_PROXYとHTTPS_PROXYプロセス内のすべてのrequestsの呼び出しURLの中編集できないコード。NO_PROXYには経由させないホストを並べる
socks5h:// URL設定した範囲すべてURLの中ホスト名をプロキシ側で名前解決させたいとき

requestsとプロキシでうまくいかない点

httpキーしか設定していない

キーが表すのは宛先のスキームで、プロキシのスキームではありません。httpだけの辞書では、平文のHTTPはプロキシを通りますが、HTTPSの呼び出しはすべて直接出ていき、それを知らせるエラーも出ません。

socks5hのつもりでsocks5と書いた

socks5では、お客様のマシンがホスト名を名前解決し、プロキシにはIPを渡します。socks5hではプロキシが名前解決するので、問い合わせもその応答もプロキシのネットワークから来ます。所在地によって応答を変えるサイトでは、この違いが効いてきます。

URLを壊すパスワード

パスワードにスラッシュ、疑問符、シャープが含まれるとURLがそこで切れてしまい、requestsはプロキシに届く前に失敗します。パーセント記号はエスケープとして解釈されます。パスワードをURLエンコードするか、IPホワイトリスト認証を使って認証情報を書かないようにしてください。

忘れていた環境変数

セッションでtrust_envをFalseにしない限り、requestsはHTTP_PROXY、HTTPS_PROXY、NO_PROXYを読み込み、これらの変数はSession.proxiesより優先されます。サーバーに古い変数が残っていると、セッションの通信が意図しない宛先に送られたり、プロキシを迂回したりすることがあります。

requestsの接続先

プロトコル
HTTP(HTTPSも通します)またはSOCKS5。注文ごとに切り替え
認証
ユーザー名とパスワード、またはAPIで設定するIPホワイトリスト
アドレス
期間中変わらない静的IPが1つ。名前の分かるインターネット事業者のネットワーク上
ローテーション
なし。どのリクエストも同じアドレスから

ほかのガイドと製品

Python requestsのプロキシに関する質問

Python requestsで認証付きプロキシを使うには?

ユーザー名とパスワードをプロキシURLに入れて、http://USERNAME:PASSWORD@HOST:PORTとし、httpとhttpsの両方のキーに渡します。requestsは認証情報をプロキシに送り、それが間違っていればプロキシは407を返します。予約文字を含むパスワードはエンコードするか、代わりにIPホワイトリストを使ってください。

requestsでSOCKS5プロキシを使うには?

pip install requests[socks]で追加パッケージをインストールし、注文でプロキシ自体をSOCKS5に切り替え、その後に注文に表示されるポートと認証情報をsocks5h:// URLで使います。スキームを変えるだけでは足りません。HTTPに設定されたアドレスは、切り替えるまでSOCKS5に応答しません。 SOCKS5

パスワードの代わりにIPホワイトリスト認証を使えますか?

はい。スクリプトを実行する公開IPv4アドレスを、API呼び出し1回(PUT /orders/ORDER_ID/whitelist)か、MCPサーバー経由でプロキシのホワイトリストに追加します。ダッシュボードにはまだ設定項目がありません。追加すると、プロキシはそのアドレスからの接続を認証情報なしで、HTTPでもSOCKS5でも受け入れ、URLはhttp://HOST:PORTになります。ホワイトリストが設定されている間、プロキシは一覧にあるアドレスだけを受け入れ、その注文ではユーザー名とパスワードが使えなくなります。空のリストを送るとホワイトリストがオフになり、パスワードでのログインがふたたび使えるようになります。

リクエストごとにアドレスはローテーションしますか?

しません。静的ISPプロキシは、お支払いいただいた期間中ずっと1つのアドレスで、そこを通して送るリクエストはすべてそのアドレスから出ていきます。リクエストごとに別のアドレスが必要なジョブにはローテーションのプールが必要ですが、当社ではまだ販売していません。

サイトにどのIPが見えているか確認するには?

同じプロキシ経由で、呼び出し元のアドレスを返すページにリクエストを送るか、そのプロキシを設定したブラウザでWhat Is My IPを開きます。お客様自身のアドレスが表示される場合は、おそらくhttpsキーが抜けています。 What Is My IP

プロキシは何に使えますか?

自社サイトの地域別テスト、品質チェック、広告検証、価格調査や市場調査、ブランド保護は、当社の適正利用ポリシーのもとで事前審査なしに行えます。プロキシでCAPTCHA、ボット検出、レート制限、アカウント停止を回避することはできず、それを試みることもポリシーで禁止しています。 適正利用ポリシー

静的アドレスは、毎回同じ場所から届くべきジョブに向いています。監視、地域別のチェック、今日と先週を比べるテストなどです。ジョブごとに1つのアドレスをISPプロキシで注文し、価格は料金でご確認ください。同じジョブをブラウザで動かす場合は、SeleniumとPlaywrightのガイドで同じアドレスを設定できます。

出典