Naudokite proxy IP su urllib3
HTTP tarpiniam serveriui rinkitės ProxyManager, tikrinkite urllib3 atsakymo laukus ir atsižvelkite į pakartojimus bei atskirą SOCKS valdiklį.
Nedidelei urllib3 tarpinio serverio diagnostikai naudokite ProxyManager išjungę pakartojimus. Taip pranešamas pirmas bandymas, o ne ilgiau kartojamas jau neveikiantis įrašas. uv valdomame projekte:
uv add urllib3Dokumentacijos galinį tašką pakeiskite savo paslaugos HTTP tarpiniu serveriu arba įrašu iš HTTP tarpinių serverių sąrašo ir užklausą vykdykite per tą valdiklį:
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()
Pirmiausia skaitykite response.status, tuomet tikrinkite response.data. Tai urllib3 laukai; Requests stiliaus status_code ir text jų nepakeičia. Svetainės atmetimas gali ateiti per veikiantį tarpinį serverį. Išimtis prieš atsakymą reiškia, kad užklausos nepavyko užbaigti.
retries=False yra diagnostikos pasirinkimas, ne gamybinė pakartojimų politika. 5 sekundžių ryšio ir 10 sekundžių skaitymo nuostatos riboja savas fazes; jos nesudaro garantuoto bendro 15 sekundžių termino. DNS ir atsakymo eiga gali paveikti visą laukimą.
Pavyzdys iš anksto įkelia turinį ir pabaigoje išvalo valdiklio ryšių telkinius. Kartotinėms užklausoms per tą patį tašką išlaikykite valdiklį iki darbo pabaigos, kad ryšius būtų galima pakartotinai naudoti. Perėjimas prie preload_content=False keičia gyvavimo ciklą: kvietėjas turi perskaityti ir atlaisvinti srautinį atsakymą.
Valdiklį rinkitės pagal klausantį paslaugos galą. Įprastas PoolManager nepradeda naudoti tarpinio serverio dėl kitur išsaugoto URL; SOCKS naudoja urllib3.contrib.socks.SOCKSProxyManager ir jo pasirenkamas priklausomybes. Aukščiau pateiktas kodas naudoja HTTP ProxyManager kelią.