Uporabite IP proxyja z urllib3
Za HTTP proxy izberite ProxyManager, preglejte polja odgovora urllib3 ter upoštevajte ponovne poskuse in ločenega upravljavca SOCKS.
Za majhno diagnostiko proxyja v urllib3 uporabite ProxyManager z izklopljenimi ponovnimi poskusi. Tako dobite prvi poskus, namesto da dlje ponavljate vnos, ki je nehal delovati. V projektu, ki ga upravlja uv:
uv add urllib3Dokumentacijsko končno točko zamenjajte s proxyjem HTTP svoje storitve ali s seznama proxyjev HTTP in izvedite zahtevo prek tega upravljavca:
import urllib3
proxy = urllib3.ProxyManager(
"http://203.0.113.10:8080",
timeout=urllib3.Timeout(connect=5, read=10),
retries=False,
)
try:
response = proxy.request("GET", "https://example.com/")
print(response.status)
print(response.data.decode("utf-8", errors="replace")[:200])
finally:
proxy.clear()
Najprej preberite response.status, nato preglejte response.data. To so polja urllib3; status_code in text iz sloga Requests nista nadomestka. Zavrnitev strani lahko prispe prek delujočega proxyja. Izjema pred odgovorom pa pomeni, da zahteve ni bilo mogoče dokončati.
retries=False je diagnostična izbira, ne produkcijska politika ponovnih poskusov. Nastavitvi 5 sekund za povezavo in 10 sekund za branje omejujeta lastni fazi; ne pomenita zagotovljenega skupnega roka 15 sekund. DNS in napredovanje odgovora lahko vplivata na skupno čakanje.
Primer vnaprej naloži telo in na koncu počisti zbirke povezav upravljavca. Pri ponovljenih zahtevah prek iste točke upravljavca obdržite do konca dela, da se povezave lahko ponovno uporabijo. Prehod na preload_content=False spremeni življenjski cikel: klicatelj mora pretočni odgovor prebrati in sprostiti.
Izberite upravljavca, ki ustreza poslušajoči storitvi. Običajen PoolManager ne začne uporabljati proxyja zato, ker je URL shranjen drugje; SOCKS uporablja urllib3.contrib.socks.SOCKSProxyManager in njegove izbirne odvisnosti. Zgornja koda sledi poti HTTP ProxyManager.