Cómo configurar el servidor proxy en AIOHTTP

Aprende a configurar el servidor proxy en AIOHTTP gracias a esta guía que lo explica paso a paso.
14 min read
How to Set Proxy in AIOHTTP

Cuando termines de leer esta guía de integración de proxy en AIOHTTP, sabrás:

  • Qué es AIOHTTP.
  • Por qué tienes que usar un proxy.
  • Cómo configurar un proxy HTTP, HTTPS o SOCKS en AIOHTTP.
  • Cómo gestionar la autenticación de proxy, los errores de certificado SSL y la rotación de IP, entre otros.

¿Qué es AIOHTTP?

AIOHTTP es una infraestructura popular de cliente/servidor HTTP asíncrono de Python de código abierto. Sus principales características son:

  • Asistencia tanto para el cliente como para el servidor del protocolo HTTP.
  • Asistencia para sockets web tanto del cliente como del servidor.
  • Ofrecer un servidor web con middleware y con un enrutamiento que se pueda conectar.

Lo importante de este tutorial es que puede actuar como un cliente HTTP para hacer peticiones HTTP sobre asyncio. AIOHTTP es ideal, sobre todo, para crear secuencias de comandos que tienen que gestionar varias peticiones de forma simultánea y eficiente.

Cuando se escribió este artículo, AIOHTTP tenía más de 14 000 estrellas en GitHub.

¿Por qué necesitas un servidor proxy en AIOHTTP?

Un buen motivo para usar un proxy en AIOHTTP es proteger tu identidad en internet. Cuando envías tu petición a un servidor proxy, puedes ocultar tu IP y tu ubicación, por lo que el sitio de destino creerá que tu petición viene del servidor proxy y no de ti directamente. Esto significa que le costará más trabajo identificarte y rastrearte, lo que se traduce en un extra de confidencialidad en tus operaciones en internet y ayuda a evitar las prohibiciones de la IP y las restricciones geográficas.

Ten en cuenta que puedes conseguir lo mismo con las peticiones, tal y como se indica en nuestro tutorial de integración de proxy de peticiones.

Configuración de un proxy en AIOHTTP Proxy

En esta sección paso a paso, aprenderás a configurar un proxy HTTP, HTTPS o SOCKS en AIOHTTP.

Requisitos previos de AIOHTTP

En este caso, daremos por hecho que ya tienes Python instalado en tu equipo y también un proyecto de Python con un entorno virtual preparado. Instala AIOHTTP y sus dependencias recomendadas con el siguiente comando:

pip install aiohttp[speedups]

Esto añadirá aiohttp a las dependencias de tu proyecto.

Abre tu archivo de secuencia de comandos de Python y añade la importación aiohttp:

import aiohttp

Para que aiohttp funcione con la sintaxis async/await, tendrás que utilizar asyncio. Así que importa también esa biblioteca y configura una función básica async main ():


import aiohttp
import aiohttp

import asyncio

async def main():
  # aiohttp logic...

asyncio.run(main())

¡Perfecto! Ya estás preparado para escribir la lógica de integración de proxy en AIOHTTP.

Requisitos previos de proxy

Antes de ver cómo integrar un proxy en AIOHTTP, tienes que saber qué aspecto tiene una URL de proxy.

Este es el formato de la URL que hace falta para conectarse a un servidor proxy en AIOHTTP:

<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]

En concreto, se compone de:

  • <PROTOCOL>: http para proxies HTTP, https para proxies HTTPS y socks, socks4 o socks5 para proxies en los distintos protocolos SOCKS.
  • <HOST>la IP del servidor proxy o de todo su dominio (por ejemplo, proxydomain.com).
  • <PORT>: el puerto conectado al servidor proxy.
  • <USERNAME>: el nombre de usuario opcional para validar la conexión proxy.
  • <PASSWORD>: la contraseña opcional para validar la conexión proxy.

Ten en cuenta que <PROTOCOL> y <HOST> son las únicas partes obligatorias de la URL. La sección <PORT> es opcional, pero normalmente hay que especificarla. Por último, las secciones de credenciales <USERNAME>: y lt;PASSWORD> solo son necesarias cuando se trata de proxies validados.

Si no tienes la URL de un servidor proxy, puedes conseguir una por internet de forma gratuita. Ten en cuenta también que los servidores proxy gratuitos están llenos de datos y son poco fiables, inconsistentes, sospechosos y propensos a los fallos. Lo recomendable es utilizarlos solo con el objetivo de aprender. En producción, necesitarás un proxy fiable de calidad de un buen proveedor como Bright Data.

En este mismo artículo, más adelante, verás cómo obtener un proxy de Bright Data y cómo usarlo en AIOHTTP.

Integración de proxy HTTP

Como se ha mencionado anteriormente, AIOHTTP admite la integración de proxy HTTP. Supongamos que esta es la URL de tu proxy HTTP:

http://190.6.23.219:999

Puedes especificarlo en tu petición en AIOHTTP usando la opción de proxy de esta manera:


async with aiohttp.ClientSession() as session:
    async with session.get(
        'https://example.com',
        proxy='http://190.6.23.219:999'
    ) as response:
        print(response.status)

Ahora AIOHTTP enrutará la petición GET a través de la URL del proxy pasada como un argumento proxy a la función get ().

Ten en cuenta que puedes usar un proxy HTTP para el tráfico HTTP y HTTPS.

Integración de proxy HTTPS

Esto se vuelve un poco más complejo cuando hay que tratar con proxies HTTPS. Como se indica en los documentos de AIOHTTP:

«En Python 3.10, la compatibilidad con TLS en TLS está deshabilitada para los transportes que asyncio utiliza. Si la versión posterior de Python (por ejemplo, la v3.11) alterna un atributo, funcionará™.

aiohttp v3.8 y las versiones posteriores están preparadas para que esto ocurra y tienen un código que admite TLS en TLS, por lo que envía peticiones HTTPS a través de túneles proxy HTTPS».

Es decir, si quieres usar proxies HTTPS en AIOHTTP, tienes que actualizar Python a la versión 3.11 y aiohttp a la v3.8 o posterior. El método para la integración del proxy HTTPS en AIOHTTP sigue siendo el mismo que hemos visto anteriormente. Lo único que cambia es que el protocolo proxy será https en lugar de http.

Integración de proxy SOCKS

AIOHTTP no admite proxies SOCKS que estén listos para usar. Si tienes que usar un proxy SOCKS en AIOHTTP, tienes que instalar aiohtpp-socks:

pip install aiohttp_socks

Esta biblioteca utiliza python-socks para ampliar AIOHTTP con la asistencia de SOCKS4(a) y SOCKS5(h).

Toma esto como la URL de tu proxy SOCKS:

socks5://98.175.31.195:4145

Úsalo en AIOHTTP de esta forma:


# initialize a SOCKS proxy connector
connector = ProxyConnector.from_url('socks5://98.175.31.195:4145')

# initialize an AIOHTTP client with the SOCKS proxy connector
async with aiohttp.ClientSession(connector=connector) as session:
    async with session.get('https://example.com') as response:
        print(response.status)

Ahora AIOHTTP enrutará la petición GET a través del proxy SOCKS indicado.

ProxyConnector viene de aiohttp-socks, así que no olvides importarlo con:

from aiohttp_socks import ProxyConnector

Mientras tanto, aiohttp-socks define un conector AIOHTTP para modificar las peticiones y hacer que pasen por el proxy SOCKS indicado.

Ejemplo completo

Acabas de aprender a utilizar un proxy en AIOHTTP. Vamos a comprobar que todo lo anterior funciona bien con un ejemplo completo.

Para hacerlo más sencillo, vamos a trabajar con un proxy HTTP, pero puedes adaptar el siguiente ejemplo a HTTPS y SOCKS con facilidad.

La URL de destino de la petición GET será el punto final /ip del proyecto HTTPBin. Esta API devuelve la IP de la petición de entrada. Por lo tanto, si la integración del proxy se realiza de forma correcta, el punto final debe responder con la IP del servidor proxy y no con la tuya.

Vamos a volver a suponer que esta es la URL de tu servidor proxy HTTP:

http://190.6.23.219:999

Intégralo en AIOHTTP y saca los datos que devuelve el punto final https://httpbin.io/ip con:


import aiohttp
import asyncio

async def main():
    async with aiohttp.ClientSession() as session:
        # perform a GET request through an HTTP proxy
        async with session.get(
          'https://httpbin.io/ip',
          proxy='http://190.6.23.219:999'
        ) as response:
            # extract the response data and print it
            json = await response.json()
            print(json)

asyncio.run(main())

Cuando ejecutas esta secuencia de comandos, debería aparecerte:


{
  'origin': '190.6.23.219'
}

¡Ya está! Esa es exactamente la IP del servidor proxy y significa que la integración del proxy AIOHTTP funciona a la perfección.

Nota: los servidores proxy son de corta duración. Cuando leas este tutorial, el proxy seleccionado ya no funcionará y la anterior secuencia de comandos fallará. Para que funcione, sustituye el proxy HTTP por uno nuevo y que esté operativo.

Proxy en AIOHTPP: casos prácticos avanzados

Ya conoces los conceptos básicos de la integración de proxy en AIOTTP, pero ¿qué pasa con las técnicas más complejas? ¡Averígualo en esta sección!

Proxies globales mediante variables de entorno

AIOHTTP admite dos formas de decidir qué proxy usar:

  1. Utiliza la URL del proxy transmitida al parámetro del proxy.
  2. Si trust_env se establece en True, lee las variables de entorno HTTP_PROXY y HTTPS_PROXY.

Por lo tanto, puedes configurar un proxy de forma global en AIOHTTP configurando los siguientes entornos:

  • HTTP_PROXY: la URL del servidor proxy que se utilizará para las peticiones HTTP.
  • HTTPS_PROXY: la URL del servidor proxy que se utilizará para las peticiones HTTPS.

Por ejemplo, configúralos en Linux o en macOS con los siguientes comandos:


export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"
export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"

A continuación, dicta trust_env=True a aiohttp.ClientSession():

async with aiohttp.ClientSession(trust_env=True) as session:

Ahora puedes designar session.get () sin el parámetro proxy.


async with aiohttp.ClientSession(trust_env=True) as session:
    async with session.get('https://example.com') as response:
        print(response.status)

¡Genial! AIOHTTP utilizará los proxies indicados en las variables de entorno para cada petición HTTP y HTTPS.

Para más información, utiliza el enlace, ya que el mismo procedimiento también funciona con proxies en cURL.

Métodos de autenticación de proxy

Si intentas conectarte a un servidor proxy autenticado sin las credenciales correctas, se producirá un error 407 Proxy Authentication Required.

Supongamos que la siguiente cadena es la URL para conectarse a un proxy HTTP autenticado:

http://admin:[email protected]:8928

Aquí, la URL del proxy simple es:

http://20.198.112.312:892

Y las credenciales de autenticación son:

  • Nombre de usuario: admin
  • Contraseña: PK5IP98NWP56L9SJY

AIOHTTP admite dos formas de abordar los proxies autenticados:

  1. Especifica las credenciales directamente en la URL del proxy:

async with session.get(
  'https://example.com/',
  proxy='http://admin:[email protected]:8928'
) as response:

2. Dicta las credenciales de nombre de usuario y contraseña a un objeto AIOHttp.basicAuth () y, a continuación, utilízalo en la opción proxy_auth:


proxy_auth = aiohttp.BasicAuth('admin', 'pK5ip98NWp56l9sjy')
async with session.get(
    'https://example.com/',
    proxy="http://20.198.112.312:892",
    proxy_auth=proxy_auth
) as response:

¡Genial! Ya sabes cómo funciona la autenticación del proxy en AIOHTTP.

Evitar errores en el certificado SSL

Al configurar un proxy en AIOHTTP, es posible que tus peticiones fallen por el siguiente error:

ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain 

Para evitar estos problemas con el certificado SSL, desactiva la verificación SSL con SSL=false:


async with aiohttp.ClientSession() as session:
    async with session.get(
      'https://example.com',
      proxy='http://190.6.23.219:999',
      ssl=False # turn of SSL certificate verification
    ) as response:
        print(response.status)

Los errores de verificación del certificado SSL en AIOHTTP desaparecerán al momento.

Proxies rotativos en AIOHTTP

Si utilizas el mismo servidor proxy una y otra vez, existe la posibilidad de que el sitio de destino bloquee tu dirección IP. Para evitarlo, te tienes que asegurar de que tu petición utiliza diferentes servidores proxy.

Puedes hacerlo así:

  1. Haz una lista de Python con muchas URL de proxy.
  2. Elige una URL de proxy al azar antes de cada petición.
  3. Define la URL del proxy elegida en AIOHTTP.

El principal problema de este método es que supone tener que utilizar un código repetitivo. Además, hace falta tener acceso a un grupo de servidores proxy fiables y esto no es gratis. Por suerte, ¡Bright Data tiene una solución mejor! Los proxies rotativos cambian de forma automática las direcciones IP de salida, están disponibles en 195 países, cuentan con un tiempo de actividad de red excepcional y garantizan una tasa de éxito del 99,9 %.

En el siguiente capítulo, aprenderás a empezar a usar los proxies rotativos de Bright Data en AIOHTTP.

Integración en AIOHTTP con un proxy de Bright Data

Bright Data controla los mejores servidores proxy del mundo y trabaja para empresas de Fortune 500 y para más de 20 000 clientes. Su red mundial de proxies incluye:

Esta es una de las redes proxy más grandes y fiables del mundo.

Sigue los pasos que aparecen a continuación y aprende a usar los proxies de Bright Data en AIOHTTP.

Si ya tienes una cuenta, inicia sesión en Bright Data. Si aún no tienes una cuenta, puedes creártela de forma gratuita. Tendrás acceso al siguiente panel de usuario:

Haz clic en el botón «Ver productos proxy», como se muestra a continuación:

Ver productos proxy

Serás redirigido a la siguiente página «Proxies e infraestructura de raspado web»:

Desplázate hacia abajo, busca «Proxies residenciales» y haz clic en el botón «Empezar»:

proxy residencial

Después, aparecerá el panel de configuración del proxy residencial. Sigue las indicaciones del asistente y configura el servicio de proxy según lo que necesites. Si tienes dudas sobre cómo configurar el proxy, puedes ponerte en contacto con el servicio de asistencia durante las 24 horas del día.

Ve a la pestaña «Parámetros de acceso» y extrae el host, el puerto, el nombre de usuario y la contraseña de tu proxy de la siguiente forma:

parámetro de acceso

Ten en cuenta que el campo «Host» ya incluye el puerto.

Eso es todo lo que necesitas para crear la URL del proxy y utilizarla en AIOHTTP. Recopila toda la información y crea una URL con la siguiente sintaxis:

<Username>:<Password>@<Host>

Por ejemplo, en este caso sería:

brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX

Selecciona «Proxy activo», sigue las últimas instrucciones y ¡ya está!

proxy activo

Tu fragmento de proxy en AIOHTTP para la integración de Bright Data aparecerá así:


import aiohttp
import asyncio

async def main():
    async with aiohttp.ClientSession() as session:
        # perform a GET request through an HTTP proxy
        async with session.get(
          'https://lumtest.com/myip.json',
          proxy='http://brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX'
        ) as response:
            # extract the response data and print it
            json = await response.json()
            print(json)

asyncio.run(main())

Conclusión

En este tutorial de integración de proxy en AIOHTTP, has visto por qué deberías utilizar proxies y cómo puedes hacerlo con aiohttp. Ahora ya sabes cómo puedes configurar un proxy HTTP, HTTPS o SOCKS en AIOHTTP, una conocida biblioteca de cliente HTTP de Python. Como ves aquí, para esto solo hacen falta algunas líneas de código.

Gracias a esta guía, ahora también sabes por qué no debes utilizar servicios de proxy gratuitos. Es mejor que utilices servidores proxy fiables de un proveedor de servicios proxy que esté acreditado. ¿Y cuál es el mejor proveedor del mercado? ¡Bright Data! El procedimiento de integración de proxies en AIOHTTP sigue siendo el mismo, pero las ventajas de los proxies de calidad son infinitas.