Python Requests: inicios de sesión Basic separados para proxy e sitio web
Pasa o inicio de sesión Basic do proxy pola súa URL e o do sitio de destino polo argumento auth de Requests.
O proxy da oficina pide unha conta. O sitio web que hai detrás pide outra. Requests ten entradas separadas para eses dous inicios de sesión Basic: as credenciais na URL do proxy e o argumento auth da petición.
from urllib.parse import quote
import requests
proxy_url = (
f"http://{quote(proxy_user, safe='')}:"
f"{quote(proxy_password, safe='')}@proxy.example:8080"
)
response = requests.get(
"https://reports.example/private/",
proxies={"https": proxy_url},
auth=(site_user, site_password),
timeout=(5, 20),
)
response.raise_for_status()
As catro variables de conta proveñen da configuración de credenciais da aplicación. Codificar por separado o usuario e o contrasinal do proxy conserva caracteres como o arroba sen convertelos en delimitadores de URL.
A clave https do dicionario selecciona esta ruta para un destino HTTPS. O seu valor segue comezando por http:// porque ese é o protocolo que se usa para chegar a este proxy de exemplo.
Nesa petición HTTPS, o inicio de sesión do proxy pertence ao intercambio CONNECT. O inicio de sesión do sitio pertence á petición posterior a través do túnel establecido. Deixar que o adaptador deduza a autorización do proxy desde a súa propia URL mantena no salto correspondente; para este caso Basic non fai falta unha clase de autenticación combinada.
Un 407 identifica o desafío do intermediario. Un 401 do sitio identifica o desafío do destino. Usa esa resposta para decidir cal das dúas contas configuradas precisa atención.