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 ysocks
,socks4
osocks5
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:
- Utiliza la URL del proxy transmitida al parámetro del proxy.
- Si
trust_env
se establece enTrue
, lee las variables de entornoHTTP_PROXY
yHTTPS_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:
- 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í:
- Haz una lista de Python con muchas URL de proxy.
- Elige una URL de proxy al azar antes de cada petición.
- 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:
- Proxies de centros de datos: más de 770 000 IP de centros de datos.
- Proxies residenciales: más de 72 millones de IP residenciales en más de 195 países.
- Proxies de ISP: más de 700 000 IP de ISP.
- Proxies móviles: más de 7 millones de IP móviles.
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:
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»:
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:
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á!
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.
No se requiere tarjeta de crédito