คำตอบด่วน
ฉันจะใช้พร็อกซีมือถือใน Python พร้อม IP หมุนอย่างไร?
ส่ง URL พร็อกซี http://USERNAME:[email protected]:7777 ให้ requests หรือ httpx แล้วเรียก POST /api/v1/mobile/{portId}/rotate ด้วย API key ของคุณเมื่อคุณต้องการ IP carrier ใหม่ รอคำตอบซึ่งมักใช้เวลา 5–15 วินาที และเว้นระยะห่าง 30 วินาทีระหว่างการหมุน CellMast พอร์ต 4G/5G เฉพาะเริ่มที่ $2.63/วัน ไม่ต้อง KYC จ่ายด้วยคริปโต
สิ่งที่คุณต้องมี
| Python | 3.10 หรือใหม่กว่า |
|---|---|
| ไลบรารี | requests (HTTP), requests[socks] หรือ httpx[socks] สำหรับ SOCKS5 |
| เกตเวย์ | gw.cellmast.com, พอร์ต HTTP 7777, พอร์ต SOCKS5 7778 |
| ข้อมูลประจำพอร์ต | ชื่อผู้ใช้และรหัสผ่านจากพื้นที่ลูกค้า; หลังจากทีมซัพพอร์ตย้ายพอร์ต ให้ดูโฮสต์ พอร์ต และรหัสผ่านอีกครั้งในพื้นที่ลูกค้า เพราะอาจเปลี่ยนแปลงได้ |
| API key | พร้อมสโคป proxies สำหรับการหมุน |
| ชื่อผู้ใช้กลุ่มหมุน | USERNAME-country-{cc}-session-{id}-ttl-{minutes} |
ฉันจะส่งคำขอผ่านพร็อกซีมือถือ 4G ได้อย่างไร?
ตั้งค่า URL พร็อกซีเดียวกันสำหรับ http และ https สำหรับเป้าหมาย HTTPS requests จะเปิด tunnel CONNECT ผ่านเกตเวย์ ดังนั้นเป้าหมายจะเห็น IP ของเครือข่ายมือถือและการเข้ารหัส TLS ของคุณจะยังคงปลายทางต่อปลายทาง
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)ฉันจะเปลี่ยน IP จาก 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 ในแต่ละงาน ไม่ใช่ระหว่างทำงานได้อย่างไร?
ทำงานทั้งงานบนที่อยู่เดียว จากนั้นเปลี่ยนก่อนทำงานถัดไป วิธีนี้จะทำให้คุกกี้และการเข้าสู่ระบบสม่ำเสมอในงานเดียว และให้ที่อยู่ใหม่ในแต่ละงาน
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ฉันจะใช้กลุ่มพร็อกซีที่เปลี่ยน IP พร้อมเซสชันคงที่ใน httpx ได้อย่างไร?
สำหรับกลุ่ม per-GB จะไม่มีการเรียกเปลี่ยน IP: ชื่อผู้ใช้จะกำหนด หากไม่มี session id การเชื่อมต่อใหม่แต่ละครั้งจะได้ IP ใหม่ ลูกค้า HTTP จะเปิดการเชื่อมต่อค้างไว้ (keep-alive) ดังนั้นสำหรับ IP ใหม่ต่อคำขอ ให้เปิด httpx client ใหม่ทุกคำขอ หรือส่ง 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)สคริปต์ของฉันควรจัดการกับข้อผิดพลาดใดบ้าง?
- HTTP 429 จาก API หมุนเวียน: คุณเปลี่ยน IP ภายใน 30 วินาที รอ
Retry-After - HTTP 409
port_not_active: พอร์ตหมดอายุหรือถูกระงับ ตรวจสอบในพื้นที่ลูกค้า - ข้อผิดพลาดเชื่อมต่อพร็อกซีหลังการเปลี่ยน: ปกติ; โมเด็มกำลังเชื่อมต่อใหม่ ลองใหม่หลังหยุดสั้นๆ
- HTTP 407 จากเกตเวย์: ชื่อผู้ใช้หรือรหัสผ่านพอร์ตผิด
- เป้าหมายตอบกลับ 403 หรือ 429: ลดความเร็วก่อน แล้วเปลี่ยน IP ครั้งหนึ่ง IP มือถือเป็นแบบแชร์ และการชะลอช่วยแก้ปัญหาส่วนใหญ่
คำถามเกี่ยวกับ Python และพร็อกซีมือถือ
ฉันควรใช้ HTTP หรือ SOCKS5 ใน Python?
HTTP ใช้งานง่ายและใช้กับ requests ธรรมดา SOCKS5 ต้องใช้ requests[socks] เพิ่มเติมแต่รองรับทราฟฟิก TCP ทุกประเภท และ socks5h:// จะแก้ DNS ฝั่งพร็อกซีแทนเครื่องของคุณ ทั้งคู่เข้าถึงโมเด็ม CellMast ตัวเดียวกัน: HTTP บนพอร์ต 7777, SOCKS5 บนพอร์ต 7778
ฉันใช้ asyncio กับพร็อกซีมือถือได้ไหม?
ได้ ทั้ง httpx.AsyncClient(proxy=...) และ aiohttp รองรับ URL พร็อกซี HTTP ควรรักษาการประมวลผลพร้อมกันในระดับปานกลางบนพอร์ตเฉพาะเพียงพอร์ตเดียว เพราะเป็นโมเด็มหนึ่งตัวบนการเชื่อมต่อเครือข่ายมือถือหนึ่งรายการ ดังนั้นหลายคำขอพร้อมกันจะแชร์ช่องสัญญาณวิทยุเดียวกัน
ฉันทำให้ Selenium หรือ Playwright ใช้งานพอร์ตได้อย่างไร?
ใน Playwright ให้ส่ง proxy={"server": "http://gw.cellmast.com:7777", "username": "USERNAME", "password": "PASSWORD"} เป็นพารามิเตอร์ของ launch() หรือ new_context() ตัวเลือกพร็อกซีของ Selenium ไม่มีรหัสผ่าน: ให้ตอบรับการล็อกอินพร็อกซีผ่าน Selenium 4 BiDi network authentication หรือใช้ Playwright เปลี่ยน IP ระหว่างบริบทของบราวเซอร์ แต่ไม่เปลี่ยนระหว่างโหลดหน้า
รับพอร์ตและคีย์ API
พอร์ต 4G/5G เฉพาะจาก $2.63/วัน, ข้อมูลมือถือหมุนเวียนจาก US$1.50/GB จ่ายด้วยคริปโต