Cómo usar un proxy con HTTPX en Python para solicitudes anónimas
Specialist in Anti-Bot Strategies
Mejora tu automatización y raspado con Scrapeless Proxies: rápidos, confiables y asequibles.
HTTPX es un cliente HTTP moderno y completo para Python que soporta tanto solicitudes sincrónicas como asincrónicas. Al realizar raspados web o hacer numerosas llamadas a API, integrar un proxy es un paso crítico para mantener el anonimato y gestionar el volumen de solicitudes. HTTPX hace que la configuración del proxy sea sencilla, soportando tanto configuraciones básicas como autenticadas.
Configuración básica del proxy en HTTPX
HTTPX te permite definir proxies usando un diccionario que mapea el protocolo (http:// o https://) a la URL del proxy. La URL del proxy sigue el formato estándar: <PROTOCOL>://<IP_ADDRESS>:<PORT>.
python
import httpx
# Define tus ajustes de proxy
proxies = {
"http://": "http://216.137.184.253:80",
"https://": "http://216.137.184.253:80"
}
# Realiza una solicitud con el proxy especificado
try:
r = httpx.get("https://httpbin.io/ip", proxies=proxies)
print(f"IP de respuesta: {r.json().get('origin')}")
except httpx.ProxyError as e:
print(f"La conexión del proxy falló: {e}")
Alternativamente, puedes configurar el proxy al inicializar una instancia de httpx.Client, lo que es el enfoque recomendado para realizar múltiples solicitudes al mismo objetivo, ya que reutiliza la conexión [4].
python
import httpx
proxy_url = "http://216.137.184.253:80"
with httpx.Client(proxies=proxy_url) as client:
r = client.get("https://httpbin.io/ip")
print(f"IP de respuesta: {r.json().get('origin')}")
Manejo de la autenticación del proxy
Para proxies que requieren un nombre de usuario y contraseña, HTTPX soporta incrustar las credenciales directamente en la URL del proxy. El formato es http://<USERNAME>:<PASSWORD>@<IP_ADDRESS>:<PORT>.
python
import httpx
# URL del proxy con credenciales incrustadas
proxy_url = "http://<TU_USUARIO>:<TU_CONTRASEÑA>@proxy.scrapeless.com:1337"
with httpx.Client(proxies=proxy_url) as client:
r = client.get("https://httpbin.io/ip")
print(f"IP de respuesta: {r.json().get('origin')}")
Implementando rotación de proxies
Para evitar la detección y mantener altas tasas de éxito, deberías rotar tus proxies. Esto implica mantener una lista de puntos finales de proxy y seleccionar aleatoriamente uno para cada solicitud o sesión. Esto es particularmente efectivo cuando se combina con una biblioteca de raspado robusta.
python
import httpx
import random
# Lista de URLs de proxy (por ejemplo, desde tu panel de Scrapeless)
proxy_urls = [
"http://user:pass@proxy1.scrapeless.com:10000",
"http://user:pass@proxy2.scrapeless.com:10001",
"http://user:pass@proxy3.scrapeless.com:10002",
]
def make_proxied_request(url):
# Selecciona un proxy aleatorio para la solicitud
random_proxy = random.choice(proxy_urls)
# Configura el proxy para el cliente
proxies = {
"http://": random_proxy,
"https://": random_proxy
}
try:
with httpx.Client(proxies=proxies, timeout=10.0) as client:
response = client.get(url)
response.raise_for_status()
return response
except httpx.RequestError as e:
print(f"Ocurrió un error al solicitar {url} a través del proxy {random_proxy}: {e}")
return None
# Ejemplo de uso
response = make_proxied_request("https://targetwebsite.com/data")
if response:
print(f"Datos raspados con éxito con código de estado: {response.status_code}")
Solución de proxy recomendada: Scrapeless Proxies
Para un raspado asincrónico de alto volumen con HTTPX, una infraestructura de proxy confiable es primordial. Scrapeless Proxies están diseñados para el rendimiento y el sigilo, ofreciendo un diverso grupo de IPs que minimizan el riesgo de ser bloqueados. Sus Proxies Residenciales y Proxies ISP Estáticos son particularmente efectivos para raspado basado en Python, proporcionando el alto nivel de confianza necesario para acceder a objetivos complejos.
Preguntas Frecuentes (FAQ)
P: ¿HTTPX soporta proxies SOCKS?
R: Sí, HTTPX soporta proxies SOCKS. Simplemente necesitas especificar el protocolo SOCKS en la URL del proxy, por ejemplo: socks5://user:pass@ip:port [5].
P: ¿Cuál es el beneficio de usar httpx.Client en lugar de httpx.get() simple?
R: Usar httpx.Client permite la agrupación de conexiones y la gestión de sesiones, lo que es más eficiente para realizar múltiples solicitudes. También te permite establecer parámetros predeterminados, como proxies, para todas las solicitudes realizadas dentro de esa sesión de cliente.
P: ¿Cómo manejo errores de proxy en HTTPX?
R: HTTPX lanza excepciones específicas para problemas de red. Debes envolver tus solicitudes en un bloque try...except y capturar httpx.ProxyError o el más general httpx.RequestError para implementar lógica de reintentos o cambiar a un proxy diferente.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.



