Python urllib: desactivar els proxys per a un sol opener
Creeu un opener d’urllib amb connexió directa mitjançant ProxyHandler({}) sense canviar altres clients ni l’entorn del procés.
Passeu un mapatge buit a ProxyHandler quan un sol opener d’urllib s’hagi de connectar directament:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
El diccionari buit no proporciona rutes de proxy. Si ometeu el mapatge, el gestor descobreix els proxys a partir de l’entorn i els paràmetres de la plataforma. Aquestes dues construccions expressen polítiques diferents.
L’exemple utilitza la biblioteca estàndard de Python i manté la verificació HTTPS normal. El bloc with tanca la resposta, fins i tot quan una excepció provoca la sortida del bloc.
Peticions directes i amb proxy en la mateixa aplicació
Dos openers poden representar les dues polítiques sense canviar variables d’entorn entre crides:
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)
Substituïu l’adreça de bucle local pel vostre proxy HTTP o trieu un candidat de la llista de proxys HTTP per a la comparació amb proxy. Pot transportar la connexió a la destinació HTTPS mitjançant CONNECT si el servei ho permet. El protocol i l’autenticació admesos pel punt d’escolta han de correspondre al gestor.
No modifiqueu l’opener predeterminat
Crideu direct.open o proxied.open a través de l’objecte responsable de la ruta. install_opener canvia el valor predeterminat de tot el procés que utilitzen les funcions de conveniència d’urllib; una biblioteca que el faci servir pot afectar codi no relacionat. No cal per a l’opener aïllat anterior.
L’argument timeout és un paràmetre d’operació, no un termini de temps real per a tota cada transferència. Llegiu només les dades necessàries i utilitzeu un termini de nivell superior si la tasca té un pressupost total estricte.
Aquests objectes opener no modifiquen el client d’una altra biblioteca, un procés existent ni la configuració de proxy d’un navegador.