URL- ul proxy#
Fiecare bibliotecă Python HTTP ia un proxy ca URL. Cu Proxy Cyber URL-ul poartă acreditările dumneavoastră și parametrii de ţintire în numele utilizatorului; numele gazdei este poarta de acces și portul alege protocolul.
# 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:9001cereri#
Refolosirea conexiunii și alocarea IP sunt controale diferite. O sesiune de client reutilizează prizele; numai poarta atribuită determină rotație și comportamentul lipicios-sesiune. Utilizați parametrii sesiunii furnizate cu serviciul dvs., și verificați ieșirea peste mai multe cereri. Închiderea unei prize sau trimiterea Conexiunii: închide nu garantează un IP diferit.
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 ia un singur proxy= argument (expuneri mai vechi: proxies=). Acesta sprijină HTTP/2 la destinație prin tunelul CONNECT și funcționează în același mod în codul 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 ia proxy pe cerere sau pe sesiune și vorbește proxy HTTP nativ; SOCKS5 are nevoie de aiohttp-socks Conector.
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())Rotație, ține-viu și retries#
- O nouă conexiune TCP este o nouă conexiune de transport, nu dovada unei noi ieșiri. Modul de rotație atribuit Porțile decide modul în care conexiunea este rutată.
- Utilizaţi un identificator de sesiune distinct pentru fiecare flux de lucru independent, în cazul în care poarta atribuită o sprijină. Confirmaţi durata permisă şi parametrii de localizare în detaliile de conectare. Un dispozitiv rezidenţial se poate deconecta înainte de durata solicitată; o sesiune lipicioasă nu este o garanţie a aceluiaşi IP pentru zile. Pentru o adresă fixă, comparaţi un produs static dedicat.
- Clasifică răspunsul înainte de rejudecare. O 403 poate indica o regulă de acces pe care un alt IP nu o va rezolva. Pentru 429, respectați rata de remetrie-După și reduceți rata de solicitare; utilizați backoff delimitată pentru conexiune temporară sau eșecuri ale serverului. Operațiuni de retehnologizare doar atunci când puteți preveni acțiuni duplicate.
- Set timeouts la tipul de ieșire: 15 s conectați și 45 s citește pentru rezidențial, mai mult pentru mobil.
Salvarea gigaocteților#
Traficul rezidenţial este facturat pe GB în ambele direcţii. Cereţi răspunsuri comprimate (Accept-Encoding: gzip, br este pe implicit în aceste biblioteci), preferă obiectivele JSON la HTML, și niciodată nu descărca imagini, fonturi sau media, cu excepția cazului în care acestea sunt datele. A 350 KB pagina este ieftin; o pagină 4 MB cu active nu este.
Întrebări pe care oamenii le pun#
De ce tot primesc acelaşi IP cu cereri?
IP-urile repetate pot rezulta din punerea în comun a conexiunilor, o sesiune activă lipicioasă sau piscina disponibilă. Comparați modul de rutare atribuit și testați mai multe cereri cu marcaje de timp. O cerere.Sesiunea gestionează conexiunile și cookie-urile; ea nu selectează ea însăși ieșirea proxy.
Am nevoie de un alt proxy pentru site-uri HTTPS?
Nu. Aceeași http:// proxy URL se ocupă de destinațiile HTTPS printr-un tunel CONNECT; TLS se termină între codul dvs. și site-ul.
Pot folosi același cod pentru proxy-uri mobile?
Da: înlocuiți res.proxy-cyber.com cu mob.proxy-cyber.com. Porturi, acreditări și parametri sunt identice.