Nelielai urllib3 starpniekservera diagnostikai izmantojiet ProxyManager ar izslēgtiem atkārtojumiem. Tas ziņo par pirmo mēģinājumu, nevis ilgāk atkārto ierakstu, kas vairs nedarbojas. Ar uv pārvaldītā projektā:

uv add urllib3

Aizstājiet dokumentācijas galapunktu ar sava pakalpojuma HTTP starpniekserveri vai ierakstu no HTTP starpniekserveru saraksta un izpildiet pieprasījumu caur šo pārvaldnieku:

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()

Vispirms lasiet response.status, pēc tam apskatiet response.data. Tie ir urllib3 lauki; Requests stila status_code un text nav aizstājēji. Vietnes atteikums var pienākt caur strādājošu starpniekserveri. Izņēmums pirms atbildes savukārt nozīmē, ka pieprasījumu neizdevās pabeigt.

retries=False ir diagnostikas izvēle, nevis produkcijas atkārtojumu politika. Savienojuma 5 sekunžu un lasīšanas 10 sekunžu iestatījumi ierobežo savas fāzes; tie neveido garantētu kopējo 15 sekunžu termiņu. DNS un atbildes virzība var ietekmēt visu gaidīšanu.

Piemērs iepriekš ielādē saturu un beigās iztīra pārvaldnieka savienojumu kopas. Atkārtotiem pieprasījumiem caur to pašu galapunktu paturiet pārvaldnieku līdz darba beigām, lai atkārtoti izmantotu savienojumus. Pāreja uz preload_content=False maina dzīves ciklu: izsaucējam jāizlasa un jāatbrīvo straumētā atbilde.

Izvēlieties pārvaldnieku atbilstoši klausītājam. Parasts PoolManager nekļūst zinošs par starpniekserveri tāpēc, ka URL glabājas citur; SOCKS izmanto urllib3.contrib.socks.SOCKSProxyManager un tā izvēles atkarības. Iepriekšējais kods izmanto HTTP ProxyManager ceļu.

Saistītie raksti