Empresa brasileira · Entrega automática · Suporte em português Seg a sex, 9h as 18h · PIX em reais
ProxyBox
Automação

Proxy em Python com requests, httpx e aiohttp

Como usar proxy com usuário e senha em Python — requests, httpx e aiohttp —, com HTTP e SOCKS5, senha com caractere especial, timeout e teste do IP de saída.

3 min de leitura Atualizado em 13 de setembro de 2026

As bibliotecas HTTP do Python aceitam proxy com usuário e senha diretamente na URL — sem extensão, sem proxy local. Este guia cobre as três mais usadas. Para navegador automatizado, veja Selenium e Playwright, Puppeteer e Scrapy.

No painel, em Meus proxies, copie host, porta HTTP, porta SOCKS5, usuário e senha.

requests

import requests

proxy = "http://usuario:[email protected]:8000"
proxies = {"http": proxy, "https": proxy}

r = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=20)
print(r.json())

Duas chaves, http e https, porque o requests escolhe o proxy pelo esquema do site acessado. Com só http, os sites HTTPS saem pelo seu IP real.

Para reaproveitar conexões em muitas requisições, use uma sessão:

s = requests.Session()
s.proxies.update(proxies)
print(s.get("https://api.ipify.org", timeout=20).text)

SOCKS5 no requests

pip install "requests[socks]"
proxy = "socks5h://usuario:[email protected]:1080"
r = requests.get("https://api.ipify.org", proxies={"http": proxy, "https": proxy}, timeout=20)

Use socks5h e não socks5: com o h, o nome do site é resolvido pelo proxy, e o DNS da sua rede não aparece. Diferença entre os protocolos em HTTP, HTTPS e SOCKS5.

httpx

import httpx

with httpx.Client(proxy="http://usuario:[email protected]:8000", timeout=20) as client:
    print(client.get("https://api.ipify.org").text)

Nas versões atuais do httpx o parâmetro é proxy, no singular. O antigo proxies foi removido; se o seu código usa proxies= e quebrou ao atualizar, é isso. Para SOCKS5, instale httpx[socks] e use socks5:// na URL.

A versão assíncrona é igual, com httpx.AsyncClient.

aiohttp

import asyncio
import aiohttp

async def main():
    async with aiohttp.ClientSession() as session:
        async with session.get(
            "https://api.ipify.org",
            proxy="http://p1.exemplo.com:8000",
            proxy_auth=aiohttp.BasicAuth("usuario", "senha"),
            timeout=aiohttp.ClientTimeout(total=20),
        ) as resp:
            print(await resp.text())

asyncio.run(main())

O aiohttp trabalha com proxy HTTP. proxy_auth separado evita o problema de caractere especial na URL. Para SOCKS5, o caminho é o pacote aiohttp-socks.

Senha com caractere especial

from urllib.parse import quote

usuario = quote("usuario", safe="")
senha = quote("s3nh@:forte", safe="")
proxy = f"http://{usuario}:{senha}@p1.exemplo.com:8000"

Erros mais comuns em Python

Mensagem Causa Onde ver
Tunnel connection failed: 407 Proxy Authentication Required Usuário ou senha recusados Erro 407
Unable to connect to proxy / Connection refused Host ou porta errados, rede bloqueando Proxy não conecta
Tunnel connection failed: 502 O proxy não chegou ao site Falha no túnel
Missing dependencies for SOCKS support Falta requests[socks] Instale o extra e rode de novo
ReadTimeout Site ou rota lenta Aumente o timeout e teste com api.ipify.org

Boas práticas

  • Sempre defina timeout. Sem ele, uma requisição travada segura o script indefinidamente.
  • Confira o IP no início do script com api.ipify.org, para não rodar horas pelo IP errado.
  • Respeite limites do site. Muitas requisições por segundo no mesmo IP geram bloqueio. Para coleta em volume, veja proxy para web scraping.

Perguntas frequentes

Preciso instalar algo para usar SOCKS5 no requests?
Sim. Instale requests[socks], que traz o suporte a SOCKS. Depois use socks5h:// na URL do proxy para que a resolução de nomes também passe pelo proxy.
Como passar senha com @ na URL do proxy?
Codifique a senha com urllib.parse.quote(senha, safe="") antes de montar a URL. O @ vira %40 e deixa de ser confundido com o separador de host.
Posso definir o proxy por variável de ambiente?
Sim. requests e httpx leem HTTP_PROXY e HTTPS_PROXY por padrão. É prático, mas vale para tudo que roda naquele ambiente; para controlar por requisição, passe o proxy no código.
Serve para scraping em grande volume?
Um IP fixo serve para volume moderado e para acessar sempre do mesmo endereço. Para muitas páginas com troca de IP, o residencial por GB é mais adequado.

Travou em alguma etapa?

Manda o print do erro no WhatsApp. Respondemos em português e, na maioria dos casos, o problema é um campo trocado entre host e porta.