Ao final deste guia de integração de proxy do AIOHTTP, você saberá:
- O que é AIOHTTP.
- Por que você deveria usar um proxy.
- Como configurar um proxy HTTP, HTTPS ou SOCKS no AIOHTTP.
- Como lidar com autenticação de proxy, erros de certificado SSL, rotação de IP e muito mais.
O que é AIOHTTP?
AIOHTTP é um popular framework de cliente/servidor HTTP assíncrono em Python, de código aberto. Suas principais características são:
- Suporte para ambos os lados do protocolo HTTP, cliente e servidor.
- Suporte para web sockets tanto do lado do cliente quanto do servidor.
- Fornece middleware e roteamento modular para um servidor web.
O que importa neste tutorial é sua capacidade de atuar como um cliente HTTP para realizar requisições HTTP usando o asyncio. O AIOHTTP é especialmente adequado para construir scripts que precisam lidar com múltiplas requisições simultâneas de forma eficiente.
Até o momento em que este texto foi escrito, o AIOHTTP tem mais de 14 mil estrelas no GitHub.
Por que você precisa de um proxy AIOHTTP?
Um bom motivo para usar um proxy no AIOHTTP é proteger sua identidade on-line. Ao rotear sua requisição para um servidor proxy, você pode ocultar seu IP e localização, fazendo com que o site de destino acredite que sua requisição vem do servidor proxy e não de você. Isso significa que será mais difícil identificar e rastrear você, adicionando confidencialidade às suas operações on-line e evitando banimentos de IP e restrições geográficas.
Observe que você pode obter o mesmo resultado com requisições
, conforme abordado em nosso tutorial de integração de proxy com requisições
.
Configurando um proxy no AIOHTTP
Nesta seção passo a passo, você aprenderá como configurar um proxy HTTP, HTTPS ou SOCKS no AIOHTTP.
Pré-requisitos do AIOHTTP
Aqui, vamos supor que você já tenha o Python instalado em sua máquina e um projeto Python com um ambiente virtual configurado. Instale o AIOHTTP e suas dependências recomendadas com o seguinte comando:
pip install aiohttp[speedups]
Isso adicionará o aiohttp
às dependências do seu projeto.
Abra seu arquivo de script Python e adicione a importação do aiohttp
:
import aiohttp
Para fazer o aiohttp funcionar com a sintaxe async/await
, você precisará usar o asyncio
. Então importe essa biblioteca também e configure uma função básica async main()
:
import aiohttp
import aiohttp
import asyncio
async def main():
# aiohttp logic...
asyncio.run(main())
Perfeito! Você está pronto para escrever a lógica de integração do proxy AIOHTTP!
Pré-requisitos para o proxy
Antes de ver como integrar um proxy no AIOHTTP, você precisa entender como é uma URL de proxy.
Esse é o formato do URL necessário para se conectar a um servidor proxy no AIOHTTP:
<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]
Em detalhes, isso consiste em:
:http
para proxies HTTP,https
para proxies HTTPS esocks
,socks4
, ousocks5
para proxies nos diferentes protocolos SOCKS.
: o IP do servidor proxy ou de todo o seu domínio (por exemplo,proxydomain.com
).
: a porta que o servidor proxy está ouvindo.
: o nome de usuário opcional para autenticar a conexão proxy.
: a senha opcional para autenticar a conexão proxy.
Observe que
e
são as únicas partes obrigatórias do URL. A seção
é opcional, mas normalmente você precisa especificá-la. Por fim, a seção de credenciais
só é necessária ao lidar com proxies autenticados.
Se você não tiver o URL de um servidor proxy, pode obter um online gratuitamente. Ao mesmo tempo, tenha em mente que os proxies gratuitos são pouco confiáveis, consomem muitos dados, são inconsistentes, propensos a erros e duvidosos. Você pode usá-los apenas para fins de aprendizado. Na produção, você precisará de um proxy premium confiável de um provedor de alto nível como a Bright Data.
Posteriormente neste artigo, você verá como obter um proxy Bright Data e usá-lo no AIOHTTP.
Integração de Proxy HTTP
Conforme mencionado na documentação, o AIOHTTP oferece suporte à integração de proxy HTTP. Suponha que esta seja a URL do seu proxy HTTP:
http://190.6.23.219:999
Você pode especificá-lo em sua solicitação do AIOHTTP usando a opção proxy conforme abaixo:
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)
Agora, o AIOHTTP roteará a requisição GET por meio da URL do proxy passada como argumento proxy
para a função get()
.
Lembre-se de que você pode usar um proxy HTTP para tráfego HTTP e HTTPS.
Integração de Proxy HTTPS
Quando se trata de proxy HTTPS, as coisas se tornam um pouco mais complexas. Conforme declarado na documentação do AIOHTTP:
“No Python 3.10, o suporte para TLS em TLS está desativado para os transportes que o
asyncio usa
. Se uma versão posterior do Python (digamos, v3.11) alterar um atributo, ele funcionará™.O aiohttp v3.8 e superior está pronto para isso acontecer e possui código pronto que suporta TLS em TLS, possibilitando enviar requisições HTTPS através de túneis de proxy HTTPS.”
Em outras palavras, se você quiser usar proxies HTTPS no AIOHTTP, você precisará atualizar o Python para a versão 3.11 e o aiohttp
para a versão 3.8 ou superior. A abordagem para a integração do proxy HTTPS no AIOHTTP permanece a mesma vista acima. O único aspecto que muda é que o protocolo proxy será https
e não mais http
.
Integração de Proxy SOCKS
O AIOHTTP não oferece suporte a proxy SOCKS prontos para uso. Se você precisar usar um proxy SOCKS no AIOHTTP, você precisará instalar o aiohttp-socks
:
pip install aiohttp_socks
Esta biblioteca usa python-socks
para estender o AIOHTTP com suporte para SOCKS4(a) e SOCKS5(h).
Considere isso como o URL do seu proxy SOCKS:
socks5://98.175.31.195:4145
Use-o no AIOHTTP da seguinte 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)
Agora, o AIOHTTP roteará a requisição GET por meio do proxy SOCKS especificado.
ProxyConnector
vem do aiohttp-socks
, então não se esqueça de importá-lo com:
from aiohttp_socks import ProxyConnector
Internamente, o aiohttp-socks
define um Conector AIOHTTP para ajustar as requisições e fazê-las passar pelo proxy SOCKS fornecido.
Exemplo completo
Você acabou de aprender a usar um proxy com AIOHTTP. Vamos verificar se as abordagens acima funcionam em um exemplo completo!
Por uma questão de simplicidade, trabalharemos com um proxy HTTP, mas você pode adaptar facilmente o exemplo abaixo para HTTPS e SOCKS.
O URL de destino da requisição GET será o endpoint /ip
do projeto HTTPBin. Essa API retorna o IP da requisição recebida. Portanto, se a integração do proxy for bem-sucedida, o endpoint deverá responder com o IP do servidor proxy e não com o seu.
Novamente, suponha que este seja o URL do seu servidor proxy HTTP:
http://190.6.23.219:999
Integre-o ao AIOHTTP e imprima os dados retornados pelo endpoint https://httpbin.io/ip com:
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())
Execute este script e você deverá obter:
{
'origin': '190.6.23.219'
}
E pronto! Esse é exatamente o IP do servidor proxy, o que significa que a integração do proxy AIOHTTP funciona perfeitamente.
Observação: os servidores proxy têm vida curta. No momento em que você ler este tutorial, o proxy selecionado não funcionará mais e o script acima falhará. Para fazê-lo funcionar, substitua o proxy HTTP por um novo e funcional.
Proxy AIOHTTP: casos de uso avançados
Você conhece os fundamentos da integração de proxy AIOHTTP, mas e quanto às técnicas mais complexas? Saiba mais nesta seção!
Proxies globais por meio de variáveis de ambiente
O AIOHTTP suporta duas maneiras de determinar qual proxy usar:
- Ele usa o URL do proxy passado para o argumento do proxy.
- Se
trust_env
estiver definido comoTrue
, ele lerá as variáveis de ambienteHTTP_PROXY
eHTTPS_PROXY
.
Portanto, você pode configurar um proxy globalmente no AIOHTTP definindo os envs abaixo:
HTTP_PROXY
: o URL do servidor proxy a ser usado para requisições HTTP.HTTPS_PROXY
: o URL do servidor proxy a ser usado para requisições HTTPS.
Por exemplo, configure no Linux ou macOS com os seguintes comandos:
export HTTP_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"
export HTTPS_PROXY="<PROTOCOL>://[<USERNAME>:<PASSWORD>@]<HOST>[:<PORT>]"
Em seguida, passe trust_env=True
para aiohttp.ClientSession()
:
async with aiohttp.ClientSession(trust_env=True) as session:
Agora, você pode chamar session.get()
sem o argumento proxy
async with aiohttp.ClientSession(trust_env=True) as session:
async with session.get('https://example.com') as response:
print(response.status)
Ótimo! O AIOHTTP usará os proxies especificados nas variáveis de ambiente para cada requisição HTTP e HTTPS.
Siga o link para saber mais, pois o mesmo mecanismo também funciona com proxies em cURL.
Abordagens de autenticação de proxy
Tentar se conectar a um proxy autenticado sem as credenciais corretas resultará em no erro 407 Autenticação de proxy necessária
.
Suponha que a string abaixo seja o URL para se conectar a um proxy HTTP autenticado:
http://admin:[email protected]:8928
Aqui, o URL simples do proxy é:
http://20.198.112.312:892
E as credenciais de autenticação são:
- Username:
admin
- Password:
pK5ip98NWp56l9sjy
O AIOHTTP suporta duas maneiras de lidar com proxies autenticados:
- Especifique as credenciais diretamente no URL do proxy:
async with session.get(
'https://example.com/',
proxy='http://admin:[email protected]:8928'
) as response:
2. Passe as credenciais de username e password para um objeto aiohttp.BasicAuth()
e use na opção 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:
Incrível! A autenticação do proxy AIOHTTP não é mais um segredo.
Evite erros no certificado SSL
Ao configurar um proxy no AIOHTTP, suas requisições podem falhar devido ao seguinte erro:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain
Para evitar esses problemas com o certificado SSL, desative a verificação SSL com 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)
Os erros de verificação de certificado SSL do AIOHTTP desaparecerão imediatamente.
Proxies rotativos no AIOHTTP
Se você usa o mesmo servidor proxy repetidamente, existe a chance de que o site de destino bloqueie seu endereço IP. Para evitar isso, você deve garantir que sua solicitação use servidores proxy diferentes.
Veja como você pode fazer isso:
- Preencha uma lista do Python com vários URLs de proxy.
- Escolha aleatoriamente um URL de proxy antes de cada requisição.
- Defina o URL do proxy escolhido no AIOHTTP.
O principal problema dessa abordagem é que ela envolve código boilerplate (códigos repetitivos). Além disso, requer acesso a um pool de servidores proxy confiáveis, o que não é gratuito. Felizmente, a Bright Data tem uma solução mais eficaz! Seus proxies rotativos mudam automaticamente os endereços IP de saída para você, estão disponíveis em 195 países, têm um tempo de atividade de rede (uptime) excepcional e garantem uma taxa de sucesso de 99,9%.
No próximo capítulo, você aprenderá como começar a usar os proxies rotativos da Bright Data no AIOHTTP.
Integrando o AIOHTTP com um Proxy da Bright Data
A Bright Data controla os melhores servidores proxy do mundo, atendendo a empresas da lista Fortune 500 e a mais de 20.000 clientes. Sua rede mundial de proxies envolve:
- Proxies de data centers — mais de 770.000 IPs de data centers.
- Proxies residenciais — mais de 72 milhões de IPs residenciais em mais de 195 países.
- Proxies de provedores de internet (ISP) — mais de 700.000 IPs de provedores.
- Proxies móveis — mais de 7 milhões de IPs móveis.
Essa é uma das maiores e mais confiáveis redes proxy do mundo!
Siga as etapas abaixo e aprenda a usar os proxies da Bright Data no AIOHTTP.
Se você já tem uma conta, faça login no Bright Data. Caso contrário, crie uma conta gratuitamente. Você terá acesso ao seguinte painel de usuário:
Clique no botão “Exibir produtos de proxy” conforme abaixo:
Você será redirecionado para a página “Infraestrutura de proxies e scraping”:
Role para baixo, encontre o cartão “Proxies residenciais” e clique no botão “Começar”:
Você acessará o painel de configuração de proxy residencial. Siga o assistente guiado e configure o serviço de proxy de acordo com suas necessidades. Se você tiver alguma dúvida sobre como configurar o proxy, sinta-se à vontade para entrar em contato com o suporte 24 horas por dia, 7 dias por semana.
Vá para a guia “Parâmetros de acesso” e encontre o host, porta, nome de usuário e senha do seu proxy da seguinte forma:
Note que o campo “Host” já inclui a porta.
Isso é tudo o que você precisa para criar o URL do proxy e usá-lo no AIOHTTP. Junte todas as informações e crie uma URL com a seguinte sintaxe:
<Username>:<Password>@<Host>
Por exemplo, nesse caso, seria:
brd-customer-hl_4hgu8dwd-zone-residential:[email protected]:XXXXX
Ative o “Proxy ativo”, siga as últimas instruções e você estará pronto para começar!
Seu trecho de código de integração do AIOHTTP com a Bright Data se parecerá com o seguinte:
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())
Conclusão
Neste tutorial de integração de proxy AIOHTTP, você viu por que deveria usar proxies e como fazer isso com o aiohttp
. Agora você sabe como configurar um proxy HTTP, HTTPS ou SOCKS no AIOHTTP, uma biblioteca popular de cliente HTTP do Python. Como provado aqui, isso requer apenas algumas linhas de código!
Graças a este guia, você também entendeu por que você nunca deve usar serviços de proxy gratuitos. Em vez disso, você deve adotar servidores proxy confiáveis de um provedor de serviços proxy confiável. O melhor provedor do mercado? Bright Data! O procedimento de integração de proxy no AIOHTTP permanece o mesmo, mas os benefícios de um proxy premium são inúmeros.
Não é necessário cartão de crédito