Python urllib: dezactivați proxy-urile pentru un singur opener
Creați un opener urllib cu conexiune directă folosind ProxyHandler({}), fără să schimbați alți clienți sau mediul procesului.
Transmiteți o mapare goală către ProxyHandler când un singur opener urllib trebuie să se conecteze direct:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
Dicționarul gol nu furnizează rute de proxy. Omiterea mapării permite în schimb handlerului să descopere proxy-uri din mediu și din setările platformei. Cele două construcții exprimă politici diferite.
Exemplul folosește biblioteca standard Python și păstrează verificarea HTTPS normală. Blocul with închide răspunsul, inclusiv când o excepție provoacă ieșirea din bloc.
Cereri directe și prin proxy în aceeași aplicație
Două openere pot reprezenta cele două politici fără schimbarea variabilelor de mediu între apeluri:
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)
Înlocuiți adresa loopback cu proxy-ul HTTP propriu sau alegeți un candidat din lista de proxy-uri HTTP pentru comparația prin proxy. Acesta poate transporta conexiunea către ținta HTTPS prin CONNECT când serviciul permite. Protocolul și suportul de autentificare al punctului de ascultare trebuie să corespundă handlerului.
Nu modificați openerul implicit
Apelați direct.open sau proxied.open prin obiectul responsabil de rută. install_opener schimbă valoarea implicită pentru întregul proces folosită de funcțiile de conveniență urllib; astfel, o bibliotecă ce îl folosește poate afecta cod fără legătură. Nu este necesar pentru openerul izolat de mai sus.
Argumentul timeout este o setare de operație, nu un termen de timp real pentru întreaga durată a fiecărui transfer. Citiți doar datele necesare și folosiți un termen de nivel superior dacă sarcina are un buget total strict.
Aceste obiecte opener nu schimbă clientul altei biblioteci, un proces existent sau setările proxy ale unui browser.