빠른 답변
Python에서 IP 회전과 함께 모바일 프록시는 어떻게 사용하나요?
프록시 URL http://USERNAME:[email protected]:7777을 requests 또는 httpx에 전달하고 새 캐리어 IP가 필요할 때 API 키와 함께 POST /api/v1/mobile/{portId}/rotate을 호출하세요. 응답은 보통 5~15초 걸리며 회전 간 30초 간격을 지켜야 합니다. CellMast 전용 4G/5G 포트는 일일 $2.63부터 시작, KYC 없이, 암호화폐로 결제 가능.
필요한 것
| Python | 3.10 이상 |
|---|---|
| 라이브러리 | requests (HTTP), SOCKS5용 requests[socks] 또는 httpx[socks] |
| 게이트웨이 | gw.cellmast.com, HTTP 포트 7777, SOCKS5 포트 7778 |
| 포트 자격 증명 | 클라이언트 영역에서 받은 사용자 이름과 비밀번호; 지원 팀이 포트를 이동하면 호스트, 포트, 비밀번호가 바뀔 수 있으니 클라이언트 영역에서 다시 확인하세요. |
| API 키 | 회전을 위한 proxies 범위 포함 |
| 회전 풀 사용자 이름 | USERNAME-country-{cc}-session-{id}-ttl-{minutes} |
모바일 포트를 통해 요청을 보내려면 어떻게 해야 하나요?
http와 https에 동일한 프록시 URL을 설정하세요. HTTPS 대상의 경우 requests가 게이트웨이를 통해 CONNECT 터널을 열어 대상이 캐리어 IP를 볼 수 있으며 TLS는 종단 간(end to end)으로 유지됩니다.
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>'}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"))작업 중간이 아니라 작업 사이에서 IP를 회전하려면?
하나의 작업을 하나의 주소에서 실행한 후 다음 작업 전에 회전하세요. 이렇게 하면 작업 내에서는 쿠키와 로그인 상태가 일관되고 각 작업에 새 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 examplehttpx에서 스티키 세션과 함께 회전 풀을 사용하려면?
GB 단위 풀에는 회전 호출이 없습니다: 사용자 이름이 결정합니다. 세션 ID가 없으면 각 새 연결마다 새 IP가 할당됩니다. HTTP 클라이언트는 연결을 유지(keep-alive)하므로 요청당 새 IP를 원하면 각 요청마다 새 클라이언트를 열거나 Connection: close를 보내세요. session-<id>-ttl-<minutes>를 사용하면 요청이 해당 시간 동안 하나의 IP를 유지합니다.
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가 더 간단하며 plain requests에서 작동합니다. SOCKS5는 requests[socks]가 추가로 필요하지만 모든 TCP 트래픽을 처리하고, socks5h://는 DNS를 클라이언트가 아닌 프록시 쪽에서 해결합니다. 둘 다 같은 CellMast 모뎀에 도달하며 HTTP는 포트 7777, SOCKS5는 포트 7778를 사용합니다.
asyncio를 모바일 프록시와 함께 사용할 수 있나요?
예. httpx.AsyncClient(proxy=...)와 aiohttp 모두 HTTP 프록시 URL을 허용합니다. 단일 전용 포트에서 적당한 동시성으로 유지하세요: 한 모뎀과 한 캐리어 연결이라 수십 개의 병렬 요청이 동일한 무선 링크를 공유합니다.
Selenium이나 Playwright에서 포트를 사용하려면?
Playwright에서는 proxy={"server": "http://gw.cellmast.com:7777", "username": "USERNAME", "password": "PASSWORD"}를 launch() 또는 new_context()에 전달하세요. Selenium 프록시 옵션에는 비밀번호가 없으며 Selenium 4 BiDi 네트워크 인증으로 프록시 로그인을 처리하거나 Playwright를 사용하세요. 페이지가 로드 중일 때는 회전하지 말고 브라우저 컨텍스트 사이에서 회전하세요.
포트와 API 키 얻기
일일 $2.63의 전용 4G/5G 포트, US$1.50/GB의 회전형 모바일 데이터. 암호화폐로 결제하세요.