Python urllib: çaktivizoni proxy-t për një opener
Krijoni një opener urllib që lidhet drejtpërdrejt me ProxyHandler({}), pa ndryshuar klientët e tjerë ose mjedisin e procesit.
Kaloni një hartëzim bosh te ProxyHandler kur një opener urllib duhet të lidhet drejtpërdrejt:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Fjalori bosh nuk jep rrugë proxy. Nëse e lini hartëzimin pa dhënë, trajtuesi zbulon proxy-t nga mjedisi dhe cilësimet e platformës. Këto dy mënyra krijimi shprehin politika të ndryshme.
Shembulli përdor bibliotekën standarde të Python dhe ruan verifikimin normal HTTPS. Blloku with mbyll përgjigjen, edhe kur një përjashtim shkakton daljen nga blloku.
Kërkesa të drejtpërdrejta dhe përmes proxy-t në të njëjtin aplikacion
Dy opener mund të mbajnë dy politikat pa ndryshuar ndryshoret e mjedisit mes thirrjeve:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
proxied = build_opener(ProxyHandler({
"http": "http://127.0.0.1:8080",
"https": "http://127.0.0.1:8080",
}))
with proxied.open("https://example.com/", timeout=10) as response:
print(response.status)
Zëvendësoni adresën loopback me proxy-n tuaj HTTP ose zgjidhni një kandidat nga lista e proxy-ve HTTP për krahasimin përmes proxy-t. Ai mund ta transportojë lidhjen drejt objektivit HTTPS përmes CONNECT kur shërbimi e lejon. Protokolli dhe mbështetja e autentikimit të shërbimit dëgjues duhet të përputhen me trajtuesin.
Mos ndryshoni opener-in e parazgjedhur
Thirrni direct.open ose proxied.open përmes objektit përgjegjës për rrugën. install_opener ndryshon parazgjedhjen e gjithë procesit që përdorin funksionet ndihmëse të urllib; kështu një bibliotekë që e përdor mund të ndikojë kod të palidhur. Nuk nevojitet për opener-in e izoluar më sipër.
Argumenti timeout është cilësim i një operacioni, jo një afat i plotë në kohë reale për çdo transferim. Lexoni vetëm të dhënat që duhen dhe përdorni një afat të nivelit më të lartë nëse detyra ka buxhet total kohor të rreptë.
Këto objekte opener nuk ndryshojnë klientin e një biblioteke tjetër, një proces ekzistues ose cilësimet proxy të shfletuesit.