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

> 4G/5Gモバイルプロキシ用Pythonコード：HTTPやSOCKS5経由のrequests、httpx、APIでIPローテーション、429制限対応、セッション固定。KYC不要。

- URL: https://cellmast.com/ja/guides/python-mobile-proxy/
- 最終更新日: 2026-10-13
- Publisher: CellMast (https://cellmast.com)

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

**クイックアンサー — PythonでIPローテーション付きモバイルプロキシを使うには？**

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

## 必要なもの

| 属性 | 値 |
| --- | --- |
| Python | 3.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経由のリクエスト*

```python
import requests

PROXY = "http://USERNAME:PASSWORD@gw.cellmast.com: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]")*

```python
import requests

# socks5h: the proxy resolves the hostname, not your machine
PROXY = "socks5h://USERNAME:PASSWORD@gw.cellmast.com:7778"
r = requests.get("https://api.ipify.org", proxies={"http": PROXY, "https": PROXY}, timeout=30)
print(r.text)
```

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

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

*ローテーションヘルパー*

```python
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*

```python
import requests

PROXY = "http://USERNAME:PASSWORD@gw.cellmast.com: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)*

```python
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}:PASSWORD@gw.cellmast.com: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のローテーティングモバイルデータ。暗号通貨で支払えます。 [価格を見る](https://cellmast.com/ja/pricing/) · [モバイルAPIリファレンス](https://cellmast.com/docs/api/mobile/)

---

CellMast: CellMastは4G/5Gのレジデンシャルプロキシプロバイダーです：専用キャリアモデム（トラフィック無制限）と、回転式のGB単位モバイルプールを提供。KYC不要で暗号通貨決済対応。
