Integrari · Începutul

Cum să utilizaţi proxy-uri împreună cu cererile Python, httpx şi aiohttp

Trei linii de configurare per bibliotecă, apoi aceeași sintaxă utilizator peste tot: țară, oraș și sesiune live în URL proxy, astfel încât o poartă servește fiecare loc de muncă.

3 min citește 6 secţiuni Revizuit Echipa editorială Proxy Cyber

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.

URL- uri Proxy
# 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:9001

cereri#

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.

cereri
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.

httpx
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.

aiohttp
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.

Contul dumneavoastră

Administrează toate proxy-urile într-un singur cont

Comparați rețelele, plasați comenzile și urmați cererile de echilibru și suport de la un tablou de bord. Echipa noastră evaluează plățile și oferă detalii de conexiune după livrare.

Creează cont