# Python requestsのプロキシ設定：静的ISPプロキシを使う | ProxyJam

Python requestsでプロキシを設定する方法。リクエストごと、セッションごと、リモートDNSを使うSOCKS5まで、1つの静的ISPアドレスで検証したコード付き。

- Canonical: https://proxyjam.com/ja/integrations/python-requests/
- Updated: 2026-10-23
- Language: ja

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


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


## 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](/ja/what-is-my-ip/)を開き、購入したアドレスになっていることを確かめます。
5. **タイムアウトを付けてジョブを実行する** 必ず`timeout=`を渡してください。requestsは既定では無期限に待つため、接続が止まるとスクリプトが固まったように見えます。

## requestsの検証済みコード

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

### リクエストごと

1回の呼び出しにプロキシを渡します。

```
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)
```

### SOCKS5

ホスト名をプロキシ側で名前解決するSOCKS5。

```
# 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でプロキシを設定できる場所

|  | 適用範囲 | 認証情報 | 使う場面 |
|---|---|---|---|
| 呼び出しのproxies= | その1回のリクエスト | URLの中 | 呼び出しが数回だけのスクリプト |
| Session.proxies | セッションのすべてのリクエスト | URLの中 | それより長い処理。trust_envをFalseにして使う |
| HTTP_PROXYとHTTPS_PROXY | プロセス内のすべてのrequestsの呼び出し | URLの中 | 編集できないコード。NO_PROXYには経由させないホストを並べる |
| socks5h:// URL | 設定した範囲すべて | URLの中 | ホスト名をプロキシ側で名前解決させたいとき |

requestsのドキュメントをもとに、このページのコードサンプルをローカルの認証付きプロキシで動かして確認しました。複数を設定した場合、呼び出しのproxies引数が環境変数より優先され、環境変数はSession.proxiesより優先されます。ただし、Sessionのサンプルのようにセッションでtrust_envをFalseにした場合は除きます。


## requestsの接続先

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

## 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より優先されます。サーバーに古い変数が残っていると、セッションの通信が意図しない宛先に送られたり、プロキシを迂回したりすることがあります。


## 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に応答しません。

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

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

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

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

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

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

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

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


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



## 出典

- [Requests documentation, Proxies](https://requests.readthedocs.io/en/latest/user/advanced/#proxies)：proxies引数、環境変数、SOCKSへの対応
- [RFC 1928, SOCKS Protocol Version 5](https://www.rfc-editor.org/rfc/rfc1928)：クライアントがSOCKS5プロキシに宛先を名前またはアドレスで指定する方法
- [RFC 3986, URI Generic Syntax](https://www.rfc-editor.org/rfc/rfc3986#section-3.2.1)：URLのuserinfo部分と、そこでエンコードが必要な文字




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

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

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

