Python urllib: desactivar os proxies para un só opener
Crea un opener de urllib con conexión directa mediante ProxyHandler({}) sen cambiar outros clientes nin o contorno do proceso.
Pasa unha correspondencia baleira a ProxyHandler cando un só opener de urllib deba conectarse directamente:
from urllib.request import ProxyHandler, build_opener
direct = build_opener(ProxyHandler({}))
with direct.open("https://example.com/", timeout=10) as response:
print(response.status)
O dicionario baleiro non fornece rutas de proxy. Se omites a correspondencia, o xestor descobre os proxies a partir do contorno e dos axustes da plataforma. Estas dúas construcións expresan políticas diferentes.
O exemplo usa a biblioteca estándar de Python e mantén a verificación HTTPS normal. O bloque with pecha a resposta, mesmo cando unha excepción provoca a saída do bloque.
Peticións directas e mediante proxy na mesma aplicación
Dous openers poden representar as dúas políticas sen cambiar variables de contorno entre chamadas:
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)
Substitúe o enderezo de bucle local polo teu proxy HTTP ou escolle un candidato da lista de proxys HTTP para a comparación mediante proxy. Pode transportar a conexión ao destino HTTPS mediante CONNECT cando o servizo o permita. O protocolo e a autenticación admitidos polo punto de escoita deben ser compatibles co xestor.
Non cambies o opener predeterminado
Chama a direct.open ou proxied.open mediante o obxecto responsable da ruta. install_opener cambia o valor predeterminado de todo o proceso que usan as funcións de conveniencia de urllib; unha biblioteca que o use pode afectar código alleo. Non é necesario para o opener illado anterior.
O argumento timeout é un axuste de operación, non un límite de tempo real para a totalidade de cada transferencia. Le só os datos necesarios e usa un prazo de nivel superior se a tarefa ten un orzamento total estrito.
Estes obxectos opener non modifican o cliente doutra biblioteca, un proceso existente nin a configuración de proxy dun navegador.