O URL do proxy#
Cada biblioteca HTTP Python usa um proxy como URL. Com o Proxy Cyber, o URL carrega suas credenciais e o parâmetros de segmentação no nome de usuário; o nome do host é o gateway e a porta escolhe o protocolo.
# Rotating: a new United States household on every new connection
http://USER-cc-us:PASS@res.proxy-cyber.com:9000
# Sticky: one Berlin household held for 30 minutes under the id "job42"
http://USER-cc-de-city-berlin-sid-job42-ttl-30m:PASS@res.proxy-cyber.com:9000
# SOCKS5 with remote DNS (socks5h), same parameters
socks5h://USER-cc-us:PASS@res.proxy-cyber.com:9001solicitações#
Reutilizar ligações e atribuir IPs são mecanismos diferentes. A sessão do cliente mantém sockets; o gateway atribuído determina a rotação e as sessões persistentes. Utilize os parâmetros fornecidos com o serviço e verifique a saída com vários pedidos. Fechar um socket ou enviar Connection: close não garante outro IP.
import requests
PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"
proxies = {"http": PROXY, "https": PROXY}
# One request, one exit
r = requests.get("https://api.ipify.org", proxies=proxies, timeout=30)
print(r.text)
# A sticky flow: same exit for every request of this session
sticky = "http://USER-cc-de-city-berlin-sid-cart42-ttl-15m:PASS@res.proxy-cyber.com:9000"
s = requests.Session()
s.proxies = {"http": sticky, "https": sticky}
s.get("https://example.com/product/1", timeout=30)
s.post("https://example.com/cart", json={"id": 1}, timeout=30)httpx#
httpx leva um único proxy= argumento (versões mais antigas: proxies=). Ele suporta HTTP/2 para o destino através do túnel CONNECT e funciona da mesma maneira em código assíncrono.
import httpx
PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"
with httpx.Client(proxy=PROXY, timeout=30) as client:
print(client.get("https://api.ipify.org").text)
# async, one sticky exit per task
import asyncio
async def fetch(sid: str, url: str) -> str:
proxy = f"http://USER-cc-us-sid-{sid}-ttl-10m:PASS@res.proxy-cyber.com:9000"
async with httpx.AsyncClient(proxy=proxy, timeout=30) as client:
return (await client.get(url)).text
asyncio.run(fetch("task1", "https://api.ipify.org"))aiohttp#
aiohttp pega o proxy por solicitação ou por sessão e fala proxies HTTP nativamente; SOCKS5 precisa do aiohttp-socks conector.
import aiohttp, asyncio
PROXY = "http://USER-cc-us:PASS@res.proxy-cyber.com:9000"
async def main():
async with aiohttp.ClientSession() as session:
async with session.get("https://api.ipify.org", proxy=PROXY, timeout=aiohttp.ClientTimeout(total=30)) as r:
print(await r.text())
asyncio.run(main())Rotação, keep-alive e novas tentativas#
- Uma nova ligação TCP é uma ligação de transporte, não uma prova de mudança de saída. O percurso depende do modo de rotação configurado no gateway.
- Atribua um identificador de sessão diferente a cada fluxo independente quando o gateway o permitir. Confirme a duração e os parâmetros geográficos nos dados de ligação. Um dispositivo residencial pode desligar-se antes do prazo pedido; uma sessão persistente não garante o mesmo IP durante dias. Para um endereço fixo, compare produtos estáticos dedicados.
- Identifique a causa antes de repetir. Um 403 pode resultar de uma regra de acesso que não se resolve mudando de IP. Perante um 429, respeite Retry-After e reduza a frequência; use pausas progressivas e limites para falhas temporárias de rede ou servidor. Evite duplicar operações que alteram dados.
- Defina tempos limite para o tipo de saída: 15 s de conexão e 45 s de leitura para residencial, mais para celular.
Economizando gigabytes#
O tráfego residencial é cobrado por GB em ambos os sentidos. Peça respostas compactadas (Accept-Encoding: gzip, br está ativado por padrão nessas bibliotecas), prefira terminais JSON a HTML e nunca baixe imagens, fontes ou mídia, a menos que sejam os dados. Uma página de 350 KB é barata; uma página de 4 MB com ativos não é.
Perguntas que as pessoas fazem#
Por que continuo recebendo o mesmo IP nas solicitações?
Um IP repetido pode resultar do conjunto de ligações, de uma sessão persistente ou das saídas disponíveis. Confirme o modo atribuído e teste vários pedidos com registo da hora. requests.Session gere ligações e cookies; não escolhe o IP de saída.
Preciso de um proxy diferente para sites HTTPS?
Não. O mesmo URL do proxy http:// lida com destinos HTTPS por meio de um túnel CONNECT; O TLS é executado de ponta a ponta entre o seu código e o site.
Posso usar o mesmo código para proxies móveis?
Sim: substitua res.proxy-cyber.com por mob.proxy-cyber.com. Portas, credenciais e parâmetros são idênticos.