Si Requests está disponible en tu proyecto, pasa un diccionario de proxies a la llamada:

import requests

proxies = {
    "http": "http://127.0.0.1:8080",
    "https": "http://127.0.0.1:8080",
}

response = requests.get(
    "https://example.com/",
    proxies=proxies,
    timeout=(5, 15),
)
response.raise_for_status()
print(response.status_code)

Sustituye el punto de conexión de bucle local por tu proxy en funcionamiento o por un candidato de la lista de proxies HTTP que probarás con esta petición. Las claves describen los esquemas de destino: http para URL HTTP y https para URL HTTPS. Los valores describen el puerto de escucha del proxy. Pueden ser puntos de conexión distintos si la red requiere rutas separadas.

Una dirección de proxy con http:// bajo la clave https es intencionada. Requests pide un túnel CONNECT al puerto de escucha HTTP y después establece TLS con el destino a través de él, sujeto a la política de destinos y puertos del proxy. Cambiar el valor a https:// solicita TLS con el propio proxy; puede fallar si este espera HTTP sin cifrar.

Qué significan los dos valores de tiempo de espera

timeout=(5, 15) establece los tiempos de espera de conexión y lectura. No impone un límite total de quince segundos. La llegada periódica de datos, varias direcciones y los intentos de conexión pueden alargar el tiempo transcurrido. Requests no aporta un tiempo de espera general si omites este ajuste, así que elige límites adecuados para la respuesta y añade un plazo en la aplicación si el trabajo necesita un presupuesto total estricto.

Gestiona el fallo en la etapa donde ocurre

try:
    response = requests.get(
        "https://example.com/",
        proxies=proxies,
        timeout=(5, 15),
    )
    response.raise_for_status()
except requests.exceptions.ProxyError as error:
    print("Proxy setup failed:", type(error).__name__)
except requests.exceptions.Timeout:
    print("A configured timeout expired")
except requests.exceptions.HTTPError as error:
    print("HTTP status:", error.response.status_code)

Un CONNECT rechazado puede provocar ProxyError antes de que exista una respuesta del destino. La rama HTTPError corresponde a una respuesta recibida con estado de error; Timeout significa que venció un límite configurado. Examina localmente las cadenas de excepciones del establecimiento y elimina los puntos con credenciales y las URL privadas antes de compartirlas.

Mantén activada la verificación de certificados. Si la red autorizada usa una CA privada o una interceptación gestionada, proporciona el material de confianza previsto en lugar de desactivar la verificación.

Las entradas explícitas por petición controlan las rutas indicadas aquí, pero los esquemas omitidos aún pueden verse afectados por la detección de proxies del entorno. Al trasladar la llamada a una Session reutilizable, decide cómo deben interactuar las variables de entorno, los valores por defecto de Session y las sustituciones por petición; reutilizar conexiones y definir la política de rutas son decisiones separadas.

Artículos relacionados