クイック回答
Python Requestsで静的プロキシを使用するにはどうすればよいですか?
Python Requestsで静的プロキシを使用するには、IPのホスト、ポート、ユーザー名、パスワードからプロキシURLを構築します。proxies=のhttpとhttpsの両方のキーに渡し、タイムアウトを設定し、api.ipify.orgで出口IPを確認します。SteadyProxy 静的IPは2026年10月時点で30日間$2.24の費用がかかり、KYC不要で暗号通貨支払いが可能です。
主なポイントは?
| インストール | python -m pip install requests (SOCKS5: requests[socks]) |
|---|---|
| HTTPプロキシURL | http://USERNAME:PASSWORD@host:port, for both the http and https keys |
| SOCKS5プロキシURL | socks5h://USERNAME:PASSWORD@host:port (デフォルトのSOCKS5ポート7778) |
| 特殊文字 | ユーザー名とパスワードをurllib.parse.quoteでURLエンコードします |
| 環境プロキシ | session.trust_env = Falseは他の場所で設定されたHTTP_PROXYを無視します |
| タイムアウト | (10, 30): 接続に10秒、読み取りに30秒(例の場合) |
| 検証済み | Python 3.14とRequests 2.34、2026年10月19日、パスワード保護されたテストプロキシ経由 |
1つの静的プロキシを介してリクエストを送信するにはどうすればよいですか?
各静的IPには、ダッシュボードでそれぞれのホスト、ポート、ユーザー名、パスワードが付属しています。それらをコード内ではなく環境変数に入れてください。以下のスクリプトはプロキシURLを構築し、api.ipify.orgに1つのリクエストを送信し、出口IPが期待するものでない場合に停止します。次にipinfo.ioからネットワーク名を読み取ります。テストが示したように、パスワードが間違っていると、Requestsは407 Proxy Authentication Requiredに言及するProxyErrorを発生させます。
"""Python Requests through one static proxy, with a check of the exit IP.
Install: python -m pip install requests
"""
import os
from urllib.parse import quote
import requests
HOST = os.environ.get("PROXY_HOST", "gw.steadyproxy.com")
PORT = os.environ.get("PROXY_PORT", "7777")
USER = quote(os.environ.get("PROXY_USER", "USERNAME"), safe="")
PASSWORD = quote(os.environ.get("PROXY_PASS", "PASSWORD"), safe="")
EXPECTED_IP = os.environ.get("EXPECTED_IP") # the static IP listed in your dashboard
# The proxy URL starts with http:// even for https:// sites (Requests opens a CONNECT tunnel)
PROXY = "http://" + USER + ":" + PASSWORD + "@" + HOST + ":" + PORT
PROXIES = {"http": PROXY, "https": PROXY}
with requests.Session() as session:
session.trust_env = False # ignore HTTP_PROXY / HTTPS_PROXY set elsewhere on the machine
response = session.get("https://api.ipify.org?format=json", proxies=PROXIES, timeout=(10, 30))
response.raise_for_status()
exit_ip = response.json()["ip"]
print("Exit IP:", exit_ip)
if EXPECTED_IP and exit_ip != EXPECTED_IP:
raise SystemExit("Exit IP differs from the static IP you expected")
page = session.get("https://ipinfo.io/json", proxies=PROXIES, timeout=(10, 30))
page.raise_for_status()
print("Network:", page.json().get("org"), "-", page.json().get("country"))
https://サイトに対してプロキシURLがhttp://なのはなぜですか?
proxiesディクショナリのキーはターゲットサイトのスキームであり、値はプロキシのアドレスです。https://サイトの場合、RequestsはHTTPプロキシにCONNECTトンネルを開くよう要求し、それを介してサイトへのTLSを実行します。プロキシは復号化されたページを見ることはありません。したがって、両方のキーが同じhttp://プロキシURLを指します。証明書チェックはオンのままにしてください。プロキシエラーを解消するためにverify=Falseを設定しないでください。
各アカウントに独自の静的IPを割り当てるにはどうすればよいですか?
各アカウントまたはジョブを1つのIPにマッピングし、マッピングごとに1つのSessionを構築します。SessionはCookieを保持し、接続を再利用し、trust_env = Falseの場合、そのプロキシ設定は環境変数によって置き換えられません。以下の例では、IPごとに1行を読み取ります。順序はホスト、ポート、ユーザー名、パスワードで、ダッシュボードの4つの値からコピーできます。
"""One static IP per account or per job with Python Requests.
Each line holds the four values shown for one IP in your dashboard:
host:port:username:password
"""
import os
from urllib.parse import quote
import requests
STATIC_IPS = {
"store-uk": os.environ.get("PROXY_STORE_UK", "gw.steadyproxy.com:7777:USERNAME:PASSWORD"),
"store-de": os.environ.get("PROXY_STORE_DE", "gw.steadyproxy.com:7777:USERNAME:PASSWORD"),
}
def session_for(name):
host, port, user, password = STATIC_IPS[name].split(":", 3)
proxy = "http://" + quote(user, safe="") + ":" + quote(password, safe="") + "@" + host + ":" + port
session = requests.Session()
session.trust_env = False
session.proxies = {"http": proxy, "https": proxy}
return session
for account in STATIC_IPS:
with session_for(account) as s:
ip = s.get("https://api.ipify.org", timeout=(10, 30)).text
print(account, "->", ip)
HTTPの代わりにSOCKS5を使用するにはどうすればよいですか?
requests[socks]をインストールし、http://をsocks5h://に置き換え、HTTPポートをSOCKS5ポートに置き換えます。hによりプロキシがホスト名を解決するため、DNS応答がIPの国と一致します。残りのコードは同じままです。完全でテスト済みの例はSOCKS5静的プロキシガイドにあります。1つの静的IPの両方のポートは同じ出口IPにつながります。
一般的なエラーは何を意味しますか?
各エラーは1つのレイヤーを指します。
- 407を含むProxyError: ユーザー名またはパスワードが間違っているか、このマシンが許可リストにありません。
- ConnectTimeout: ホストまたはポートが間違っているか、お使いの側のファイアウォールがプロキシポートへの送信トラフィックをブロックしています。
- ReadTimeout: ターゲットまたはパスが遅いです。後で再試行し、読み取りタイムアウトを維持してください。
- SSLError: ターゲットまたはお使いのマシンの証明書問題です。検証を無効にしないでください。
- ターゲットからの403または429: サイトがリクエストを拒否したかレート制限しました。速度を落としてください。
1つのIPが1時間すべてのリクエストに失敗する場合は、サポートに連絡してください。交換ルール: IPが動作しない場合はサポートまでご連絡ください。在庫がある場合、同じ国で修理または別IPに交換します。
Pythonと静的プロキシについて他に何が聞かれますか?
httpとhttpsの両方のキーを設定するのはなぜですか?
RequestsはターゲットURLのスキームによってプロキシを選択します。httpsキーがないと、https://サイトへのリクエストは自身のIPから直接送信されます。両方のキーを同じプロキシURLに設定すると、すべてのリクエストが静的IPを経由します。スクリプトのapi.ipify.orgチェックは、キーの欠落をすぐにキャッチします。
ユーザー名とパスワードをURLエンコードするのはなぜですか?
@、:、/などの文字はURL内で意味を持ちます。@を含むパスワードは、ログイン部分の終わりとして読み取られます。safe=''を指定したurllib.parse.quoteはそれらをエンコードし、Requestsはプロキシにログインを送信する前にデコードします。これはHTTPとsocks5h:// URLの両方で機能します。
trust_envをFalseに設定するのはなぜですか?
Requestsはデフォルトで環境からHTTP_PROXY、HTTPS_PROXY、NO_PROXYを読み取り、ドキュメントは環境プロキシがSessionのプロキシ設定を上書きする可能性があると警告しています。VPNや企業の設定が一部のリクエストを他の場所にルーティングする可能性があります。trust_env = Falseは、渡したプロキシのみをコードが使用するようにします。
同じコードをhttpxやaiohttpで使用できますか?
はい、考え方は同じです。ホスト、ポート、ユーザー名、パスワードから構築されたプロキシURL、タイムアウト、出口IPチェックです。パラメータ名はライブラリとバージョンによって異なるため、そのライブラリのプロキシドキュメントに従ってください。RequestsのSessionと同様に、静的IPごとに1つのクライアントを維持してください。
認証情報をリポジトリから遠ざけるにはどうすればよいですか?
例のように環境変数またはシークレットマネージャーから読み取り、実際の値を含む.envファイルをコミットしないでください。プロキシURLにはパスワードが含まれるため、ログに出力しないでください。IP許可リスト方式では、許可リストにあるマシン上のスクリプトはプロキシパスワードをまったく必要としません。
Pythonで1つの静的IPはいくつのリクエストを処理できますか?
プロキシの課金はGB単位ではなく、IPおよび30日単位です。GB単位ではなく、IP単位・30日単位の課金です。フェアユースが適用されます。実際の制限はターゲットサイトであり、1つのIPをレート制限する場合があります。IPごとの同時実行数を適度に保ち、遅延を追加し、各サイトの利用規約に従ってください。1つのタスクでより多くのボリュームを処理するには、作業を複数のIPに分散させます。いくつの静的IPが必要ですか?を参照してください。
このガイドはどの情報源を使用していますか? (3)
- Requestsの高度な使用法: プロキシ、SOCKS、タイムアウト — Requests (2026-10-19)
- urllib.parse: quote — Python Software Foundation (2026-10-19)
- ipify API — ipify (2026-10-19)