URL proksi#
Setiap pustaka Python HTTP mengambil proksi sebagai sebuah URL. Dengan Kunci Proksi URL memuat kredensial Anda dan target parameter dalam nama pengguna; nama host adalah gateway dan port memilih protokol.
# 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:9001permintaan#
Penggunaan ulang koneksi dan penempatan IP berbeda. Sebuah sesi klien memakai soket; hanya gateway yang diberikan menentukan rotasi dan perilaku sesi. Gunakan parameter sesi yang disediakan dengan layanan Anda, dan verifikasi keluar melalui beberapa permintaan. Tutup soket atau kirim Koneksi: tutup tidak menjamin IP lain.
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 mengambil satu proxy= argumen (versi lama: proxies=). Ini mendukung HTTP / 2 ke tujuan melalui terowongan CONNECT dan bekerja dengan cara yang sama dalam kode async.
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 mengambil proksi per permintaan atau per sesi dan berbicara proksi HTTP secara native; SOCKS5 membutuhkan aiohttp-socks Konektor.
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())Rotasi, keep-alive dan retries#
- Koneksi TCP baru adalah koneksi transportasi baru, bukan bukti jalan keluar baru. Mode rotasi gateway yang ditugaskan menentukan bagaimana koneksi tersebut dialihkan.
- Gunakan identifikasi sesi yang berbeda untuk setiap aliran kerja independen, dimana gerbang yang diberikan mendukungnya. Konfirmasi durasi dan parameter lokasi yang diizinkan dalam rincian koneksi Anda. Perangkat perumahan dapat terputus sebelum durasi yang diminta; sesi lengket bukan jaminan IP yang sama selama berhari-hari. Untuk alamat tetap, bandingkan produk statis yang berdedikasi.
- Klasifikasi respon sebelum mencoba ulang. A 403 mungkin mengindikasikan aturan akses yang IP lain tidak akan terselesaikan. Untuk 429, hormati Retry-Setelah dan kurangi laju permintaan; gunakan bunded backup untuk koneksi sementara atau server kegagalan. Coba ulang operasi perubahan status hanya bila Anda dapat mencegah duplikasi aksi.
- Atur waktu waktu untuk tipe keluar: 15 s connect dan 45 s dibaca untuk perumahan, lebih untuk mobile.
Menyimpan gigabyte#
Lalu lintas perumahan ditagih per GB di kedua arah. Tanyakan balasan terkompresi (Accept-Encoding: gzip, br hidup secara baku dalam pustaka-perpustakaan ini), lebih suka JSON titik akhir dari HTML, dan tidak pernah mengunduh gambar, fonta atau media kecuali mereka adalah data. Halaman 350 KB murah; halaman 4 MB dengan aset tidak.
Pertanyaan yang orang tanyakan#
Kenapa aku selalu dapat IP dengan permintaan yang sama?
Bandingkan mode routing yang ditugaskan dan uji beberapa permintaan dengan penanda waktu. Sebuah permintaan dengan mengelola koneksi dan cookies; itu tidak sendiri memilih keluar proksi.
Apakah saya perlu proksi yang berbeda untuk situs HTTPS?
No. http yang sama: / / proxy URL menangani tujuan HTTPS melalui terowongan CONNECT; TLS berakhir untuk mengakhiri antara kode dan situs.
Dapatkah saya menggunakan kode yang sama untuk proxy mobile?
Ya: ganti ress.proxy-cyber.com dengan mob.proxy-cyber.com. Port, kredensial dan parameter identik.