Como configurar um proxy no AIOHTTP

Aprenda a configurar um proxy no AIOHTTP neste guia passo a passo
13 min read
How to Set Proxy in AIOHTTP

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 e socks, socks4, ou socks5 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:

  1. Ele usa o URL do proxy passado para o argumento do proxy.
  2. Se trust_env estiver definido como True, ele lerá as variáveis de ambiente HTTP_PROXY e HTTPS_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:

  1. 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:

  1. Preencha uma lista do Python com vários URLs de proxy.
  2. Escolha aleatoriamente um URL de proxy antes de cada requisição.
  3. 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:

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:

visualizar produtos de proxy

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”:

proxy residencial

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:

parâmetro de acesso

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!

proxy ativo

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.