KYC不要 — ID、セルフィー、書類なし。暗号通貨で支払い:BTC, USDT, USDC, ETH, SOL, LTC。
言語: 日本語
ポートをレンタルする

ガイド · Python 3 · requests、httpx、SOCKS5

PythonでIPローテーション付きモバイルプロキシを使う方法

専用ポート CellMast またはローテーティングモバイルプール向けのコピーして使えるPythonコード:接続して、ローテーションし、新しいアドレスを待って、APIを叩きすぎずリトライします。

最終更新日:

クイックアンサー

PythonでIPローテーション付きモバイルプロキシを使うには?

プロキシURL http://USERNAME:[email protected]:7777 を requests または httpx に渡し、新しいキャリアIPが欲しい時にAPIキーを添えて POST /api/v1/mobile/{portId}/rotate を呼び出します。応答は通常5〜15秒で、ローテーション間隔は30秒を守ってください。CellMastの専用4G/5Gポートは1日あたり2.63ドルから、KYC不要、暗号資産で支払い可能です。

必要なもの

Python3.10以降
ライブラリrequests (HTTP), requests[socks] または httpx[socks] (SOCKS5)
ゲートウェイgw.cellmast.com、HTTPポート 7777、SOCKS5ポート 7778
ポート認証情報クライアントエリアからのユーザー名とパスワード;サポートがポートを移動した後はホスト、ポート、パスワードを再度クライアントエリアで確認してください。変更されることがあります。
APIキーローテーション用に proxies スコープ付き
ローテーティングプールのユーザー名USERNAME-country-{cc}-session-{id}-ttl-{minutes}

モバイルポート経由でリクエストを送るには?

http と https に同じプロキシURLを設定してください。HTTPSターゲットの場合、requests はゲートウェイ経由でCONNECTトンネルを開くため、ターゲットにはキャリアIPが見え、TLSはエンドツーエンドで保護されます。

HTTP経由のリクエスト
import requests

PROXY = "http://USERNAME:[email protected]:7777"
proxies = {"http": PROXY, "https": PROXY}

r = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=30)
print(r.json())  # {'ip': '<carrier IP>'}
SOCKS5 (pip install "requests[socks]")
import requests

# socks5h: the proxy resolves the hostname, not your machine
PROXY = "socks5h://USERNAME:[email protected]:7778"
r = requests.get("https://api.ipify.org", proxies={"http": PROXY, "https": PROXY}, timeout=30)
print(r.text)

PythonでIPをローテーションするには?

ローテーション呼び出しを429レスポンスを理解するヘルパーでラップします。以下のヘルパーは、早すぎるローテーション時にRetry-Afterを待ち、キャリアが本当に新しいアドレスを割り当てたかどうかを確認します。

ローテーションヘルパー
import time
import requests

API = "https://cellmast.com/api/v1"
KEY = "API_KEY"

def rotate(port_id: str, tries: int = 3) -> str:
    """Ask the modem for a new carrier IP and return it."""
    for _ in range(tries):
        r = requests.post(f"{API}/mobile/{port_id}/rotate",
                          headers={"Authorization": f"Bearer {KEY}"}, timeout=60)
        if r.status_code == 429:  # rotation_too_soon
            time.sleep(int(r.headers.get("Retry-After", "30")))
            continue
        r.raise_for_status()
        data = r.json()
        if data["ip"] != data.get("previousIp"):
            return data["ip"]
        time.sleep(30)  # same IP from the carrier: wait and try again
    raise RuntimeError("no new IP after several tries")

print("new IP:", rotate("PORT_ID"))

ジョブ間で(ジョブ内ではなく)ローテーションするには?

1つのジョブを同じIPで完了させ、その後次のジョブ開始前にローテーションしてください。こうすることでジョブ内でクッキーやログイン状態が保持され、ジョブごとに新しいIPを得られます。

ジョブごとに1つのIP
import requests

PROXY = "http://USERNAME:[email protected]:7777"

def run_job(urls):
    with requests.Session() as s:
        s.proxies = {"http": PROXY, "https": PROXY}
        for url in urls:
            resp = s.get(url, timeout=30)
            print(resp.status_code, url)

jobs = [["https://example.com/a", "https://example.com/b"],
        ["https://example.com/c"]]
for urls in jobs:
    run_job(urls)
    rotate("PORT_ID")  # helper from the previous example

httpxでスティッキーセッション付きローテーティングプールを使うには?

GB単位のプールにはローテーション呼び出しがなく、ユーザー名が決定要素です。セッションIDなしでは新しい接続ごとに新IPが割り当てられます。HTTPクライアントは接続を維持する(keep-alive)ため、リクエストごとに新IPが必要なら、新しいクライアントをリクエスト毎に開くか、Connection: closeを送信してください。session-<id>-ttl-<minutes>を使うと、その時間は同じIPを維持します。

httpx (pip install httpx)
import uuid
import httpx

def pool_client(country: str = "us", minutes: int | None = None) -> httpx.Client:
    user = f"USERNAME-country-{country}"
    if minutes:
        user += f"-session-{uuid.uuid4().hex[:8]}-ttl-{minutes}"
    proxy = f"http://{user}:[email protected]:7777"
    return httpx.Client(proxy=proxy, timeout=30)

with pool_client("gb", minutes=10) as c:   # same UK mobile IP for 10 minutes
    print(c.get("https://api.ipify.org").text)
    print(c.get("https://api.ipify.org").text)

スクリプトでどんなエラーを処理すべき?

  • ローテーションAPIのHTTP 429: 30秒以内にローテーションしたため。Retry-Afterまで待ってください。
  • HTTP 409 port_not_active: ポートが期限切れか停止中。クライアントエリアを確認してください。
  • ローテーション直後のプロキシ接続エラー: 通常。モデムが再接続中です。少し待ってリトライしてください。
  • ゲートウェイからのHTTP 407: ポートのユーザー名またはパスワードが誤っています。
  • ターゲットの403や429応答: まずは速度を落とし、その後一度ローテーションしてください。モバイルIPは共有されており、ペースを落とすだけで多くの問題が解消します。

Pythonとモバイルプロキシ:よくある質問

PythonでHTTPとSOCKS5どちらを使うべき?

HTTPはシンプルで普通のrequestsと動作します。SOCKS5はrequests[socks]が必要ですが、あらゆるTCPトラフィックを扱えて、socks5h://はDNS解決をあなたのマシンでなくプロキシ側で行います。両方とも同じCellMastモデムに接続します:HTTPはポート7777、SOCKS5はポート7778です。

モバイルプロキシでasyncioは使えますか?

はい。httpx.AsyncClient(proxy=...) と aiohttp はどちらもHTTPプロキシURLを受け入れます。専用ポート1つに対する同時接続数は控えめにしてください。これは1台のモデムとキャリア回線なので、何十もの並列リクエストは同じ無線リンクを共有します。

SeleniumやPlaywrightでポートを使うには?

Playwrightではproxy={"server": "http://gw.cellmast.com:7777", "username": "USERNAME", "password": "PASSWORD"}をlaunch()またはnew_context()に渡してください。Seleniumのプロキシオプションはパスワードに対応していないので、Selenium 4 BiDiのネットワーク認証でプロキシログインを処理するか、Playwrightを使ってください。ブラウザコンテキスト間でローテーションし、ページ読み込み中にローテーションしないでください。

ポートとAPIキーを手に入れる

1日あたり2.63ドルの専用4G/5Gポート、$1.50/GBのローテーティングモバイルデータ。暗号通貨で支払えます。

データ無制限

ポートをレンタルする