統合 · 初心者

Python リクエスト、httpx および aiohttp でプロキシを使用する方法

ライブラリごとに 3 行の設定があり、国、都市、セッションなどどこでも同じユーザー名構文がプロキシ URL に存在するため、1 つのゲートウェイがすべてのジョブを処理します。

3 分で読めます 6セクション 確認日 編集チーム Proxy Cyber

プロキシ URL#

すべての Python HTTP ライブラリは、URL としてプロキシを受け取ります。 Proxy Cyber を使用すると、URL には資格情報が含まれ、 ターゲティングパラメータ ユーザー名に;ホスト名はゲートウェイであり、ポートはプロトコルを選択します。

プロキシ URL
# Rotating: a new United States household on every new connection
http://USER-cc-us:PASS@res.proxy-cyber.com:9000

# Sticky: one Berlin household held for 30 minutes under the id "job42"
http://USER-cc-de-city-berlin-sid-job42-ttl-30m:PASS@res.proxy-cyber.com:9000

# SOCKS5 with remote DNS (socks5h), same parameters
socks5h://USER-cc-us:PASS@res.proxy-cyber.com:9001

リクエスト#

接続の再利用と IP 割り当ては異なる制御です。クライアントセッションはソケットを再利用します。割り当てられたゲートウェイのみがローテーションとスティッキーセッションの動作を決定します。サービスで提供されるセッション パラメーターを使用し、複数のリクエストにわたる終了を確認します。ソケットを閉じるか、Connection: close を送信しても、異なる IP が保証されるわけではありません。

リクエスト
import requests

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"
proxies = {"http": PROXY, "https": PROXY}

# One request, one exit
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=30)
print(r.text)

# A sticky flow: same exit for every request of this session
sticky = "http://USER-cc-de-city-berlin-sid-cart42-ttl-15m:PASS@res.proxy-cyber.com:9000"
s = requests.Session()
s.proxies = {"http": sticky, "https": sticky}
s.get("https://example.com/product/1", timeout=30)
s.post("https://example.com/cart", json={"id": 1}, timeout=30)

httpx#

httpx は 1 つかかります proxy= 引数 (古いバージョン: proxies=)。 CONNECT トンネルを介した宛先への HTTP/2 をサポートし、非同期コードでも同様に動作します。

httpx
import httpx

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"

with httpx.Client(proxy=PROXY, timeout=30) as client:
    print(client.get("https://api.ipify.org").text)

# async, one sticky exit per task
import asyncio

async def fetch(sid: str, url: str) -> str:
    proxy = f"http://USER-cc-us-sid-{sid}-ttl-10m:PASS@res.proxy-cyber.com:9000"
    async with httpx.AsyncClient(proxy=proxy, timeout=30) as client:
        return (await client.get(url)).text

asyncio.run(fetch("task1", "https://api.ipify.org"))

aiohttp#

aiohttp はリクエストごとまたはセッションごとにプロキシを取得し、HTTP プロキシをネイティブに話します。 SOCKS5 には、 aiohttp-socks コネクタ。

aiohttp
import aiohttp, asyncio

PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"

async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get("https://api.ipify.org", proxy=PROXY, timeout=aiohttp.ClientTimeout(total=30)) as r:
            print(await r.text())

asyncio.run(main())

ローテーション、キープアライブ、および再試行#

  • 新しい TCP 接続は新しいトランスポート接続であり、新しい終了の証明ではありません。ゲートウェイに割り当てられたローテーション モードによって、接続のルーティング方法が決まります。
  • 割り当てられたゲートウェイがサポートする独立したワークフローごとに、個別のセッション ID を使用します。接続の詳細で、許可されている期間と場所のパラメーターを確認してください。住宅用デバイスは、要求された期間が経過する前に切断される可能性があります。スティッキー セッションは、何日間も同じ IP を保証するものではありません。固定アドレスの場合はスタティック専用品と比較してください。
  • 再試行する前に応答を分類してください。 403 は、別の IP が解決できないアクセス ルールを示している可能性があります。 429 の場合は、Retry-After を尊重し、リクエスト率を下げます。一時的な接続またはサーバー障害の場合は、制限付きバックオフを使用します。重複したアクションを防止できる場合にのみ、状態変更操作を再試行してください。
  • 終了タイプにタイムアウトを設定します。住宅の場合は 15 秒の接続と 45 秒の読み取り、モバイルの場合はさらに長くなります。

ギガバイトの節約#

住宅用トラフィックは、双方向で GB 単位で課金されます。圧縮された応答を要求します (Accept-Encoding: gzip, br これらのライブラリではデフォルトでオンになっています)、HTML よりも JSON エンドポイントを優先し、データでない限り画像、フォント、またはメディアをダウンロードしません。 350 KB のページは安価です。アセットを含む 4 MB ページはそうではありません。

人々が尋ねる質問#

リクエストで同じ IP を取得し続けるのはなぜですか?

IP の繰り返しは、接続プーリング、アクティブなスティッキー セッション、または使用可能なプールによって発生する可能性があります。割り当てられたルーティング モードを比較し、タイムスタンプを使用していくつかのリクエストをテストします。 request.Session は接続と Cookie を管理します。それ自体はプロキシ出口を選択しません。

HTTPS サイトには別のプロキシが必要ですか?

いいえ。同じ http:// プロキシ URL は、CONNECT トンネルを介して HTTPS 宛先を処理します。 TLS はコードとサイトの間でエンドツーエンドで実行されます。

モバイル プロキシに同じコードを使用できますか?

はい: res.proxy-cyber.com を mob.proxy-cyber.com に置き換えます。ポート、認証情報、パラメータは同一です。

あなたのアカウント

1 つのアカウントでプロキシを管理

1 つのダッシュボードからネットワークを比較し、注文し、残高とサポート リクエストを追跡します。私たちのチームが支払いを確認し、配達後に接続の詳細を提供します。

アカウント作成