“Devo fazer a rotação a cada requisição?” é uma das primeiras perguntas que as equipes fazem quando começam a usar proxies residenciais, e a resposta honesta é: depende do que suas requisições têm em comum. Rotacionar demais quebra fluxos que um site espera que venham de um único visitante. Rotacionar de menos empilha todo o seu tráfego em um único endereço. Ambos custam bloqueios, novas tentativas e banda.
Este guia apresenta uma forma simples de decidir. A pergunta decisiva não é sobre o proxy. É sobre o seu trabalho: quais requisições pertencem juntas e por quanto tempo.
Os três modos
| Modo | O que faz | No Shifter |
|---|---|---|
| Rotação por requisição | Cada requisição sai de um IP residencial diferente | O padrão: sem flag de sessão no nome de usuário |
| Sessão fixa (sticky) | Requisições com o mesmo ID de sessão compartilham um IP até a sessão terminar | Adicione sid-<id> ao nome de usuário, opcionalmente ttl-<seconds>; a duração padrão é 120 segundos |
| IP fixo | Um endereço em uma cidade e ISP escolhidos durante todo o período de cobrança | Proxies de ISP |
Uma sessão fixa também termina antes do esperado se o IP residencial por trás dela se desconectar, então o código que usa sessões deve prever uma eventual troca de IP no meio da sessão. As sessões fixas são mantidas por região, então ferramentas que compartilham uma sessão devem se conectar pelo mesmo ponto de entrada regional.
A pergunta decisiva: o que pertence junto?
Observe a menor unidade de trabalho que seu scraper repete e pergunte duas coisas sobre ela.
1. Quantas requisições compõem uma unidade? Uma página de produto buscada sozinha é uma requisição. Uma busca seguida de seis páginas de detalhes é um fluxo. Um teste de checkout é um fluxo com estado: um carrinho, um cookie de sessão, talvez um token CSRF.
2. Quanto tempo leva uma unidade? Segundos, minutos ou horas?
A partir dessas duas respostas:
- Requisições independentes e isoladas: rotacione. Cada página existe por si só, então não há nada a ganhar em manter um IP, e distribuir as requisições por vários endereços evita que qualquer um deles pareça movimentado demais.
- Um fluxo que termina em até 30 minutos: sessão fixa. O site define cookies na primeira requisição e espera que o restante do fluxo venha do mesmo visitante. Trocar de IP no meio de uma busca ou de um carrinho parece uma sessão sequestrada, e é uma causa comum de bloqueios súbitos e perda de estado.
- Qualquer coisa mais longa, ou um login ao qual você retorna: IP fixo. Sessões fixas são feitas para minutos, não horas. Para uma sessão que dura o dia inteiro, ou uma conta que você usa todos os dias, use um proxy de ISP. Nosso guia sobre configuração de proxy de ISP para sessões longas cobre isso em detalhes.
Em código
As duas funções abaixo codificam a regra e constroem o nome de usuário correspondente do Shifter:
def proxy_username(user, country=None, session_id=None, ttl_seconds=None):
"""Build a Shifter residential username: rotate per request, or stick to one IP."""
parts = [f"customer-{user}"]
if country:
parts.append(f"country-{country}")
if session_id:
parts.append(f"sid-{session_id}")
if ttl_seconds:
parts.append(f"ttl-{ttl_seconds}")
elif ttl_seconds:
raise ValueError("ttl only works together with a session id")
return "-".join(parts)
def choose_rotation(steps, minutes, needs_login=False, same_ip_required=False):
"""Pick a rotation mode for one unit of work.
steps: requests that belong together (one page = 1, a checkout flow = many)
minutes: how long that unit of work takes
"""
if needs_login and minutes > 30:
return "isp" # a login that outlives a sticky session
if steps == 1 and not same_ip_required:
return "rotate" # independent requests: new IP each time
if minutes <= 30:
return "sticky" # a short flow: one IP until it ends
return "isp"
Aplicado a quatro tarefas típicas:
from rotation import choose_rotation, proxy_username
jobs = { # session ids must not contain hyphens: the username uses them as separators
"products": dict(steps=1, minutes=0.1),
"search": dict(steps=6, minutes=2),
"checkout": dict(steps=15, minutes=8),
"seller": dict(steps=400, minutes=240, needs_login=True),
}
for name, job in jobs.items():
mode = choose_rotation(**job)
if mode == "rotate":
user = proxy_username("USERNAME", "us")
elif mode == "sticky":
user = proxy_username("USERNAME", "us", session_id=name, ttl_seconds=job["minutes"] * 60 + 120)
else:
user = "an ISP proxy username from your plan"
print(f"{name:<9} {mode:<7} {user}")
products rotate customer-USERNAME-country-us
search sticky customer-USERNAME-country-us-sid-search-ttl-240
checkout sticky customer-USERNAME-country-us-sid-checkout-ttl-600
seller isp an ISP proxy username from your plan
O TTL é definido como a duração esperada do fluxo mais dois minutos de margem, de forma que a sessão sobreviva ao trabalho, mas não se prolongue. Dê a cada fluxo concorrente seu próprio ID de sessão: dois workers compartilhando um mesmo ID compartilham um mesmo IP, o que anula o propósito.
Como a escolha afeta custo e sucesso
Taxa de sucesso. O erro de rotação mais comum é rotacionar dentro de um fluxo. A primeira requisição recebe um cookie, a segunda chega do ISP de outro país com esse cookie, e o site a trata como suspeita. Sessões fixas para fluxos costumam corrigir mais falhas do que qualquer outra mudança isolada. O erro oposto, enviar milhares de requisições independentes por um único IP fixo, faz com que aquele endereço pareça um bot. Nosso guia sobre proxies residenciais fixos versus rotativos aprofunda os dois modos de falha.
Banda. O tráfego residencial é cobrado por gigabyte, e a rotação em si não muda isso. O que muda isso são as novas tentativas: cada fluxo que falha é baixado novamente. Alinhar o modo ao trabalho reduz as novas tentativas, e é daí que vem a economia. Dentro de uma sessão fixa, reutilizar a mesma conexão e os mesmos cookies também pode evitar baixar os mesmos recursos duas vezes.
Velocidade. Rotação por requisição significa uma nova rota a cada requisição. Se você também abrir uma nova conexão a cada vez, o tempo de configuração se acumula. Reutilizar conexões importa mais do que o modo de rotação; nosso teste em seu scraper está lento e provavelmente não é o proxy mediu o quanto.
Sinais de que você escolheu errado
| O que você vê | Causa provável | Mudança |
|---|---|---|
| Fluxos falham logo na primeira etapa; carrinho ou sessão perdidos | Rotação dentro de um fluxo | Sessão fixa por fluxo |
| Um IP bloqueado após uma rajada de requisições | Trabalho independente demais em uma única sessão fixa | Rotação por requisição para páginas independentes |
| Sessões caem antes de o trabalho terminar | TTL curto demais, ou o fluxo é longo demais para uma sessão fixa | Aumente o TTL; mova trabalhos de horas para um proxy de ISP |
| Dois workers interferem um no outro | ID de sessão compartilhado | Um ID de sessão por fluxo concorrente |
| Logins desafiados todos os dias | Um login em IPs rotativos ou fixos | IP de ISP fixo por conta |
Perguntas frequentes
Devo rotacionar meu IP de proxy a cada requisição?
Para requisições independentes, como buscar páginas de produtos não relacionadas, sim. Para qualquer coisa que abranja várias requisições com estado compartilhado, como uma busca, um carrinho ou um login, mantenha um único IP para todo o fluxo com uma sessão fixa.
Por quanto tempo uma sessão fixa deve durar?
O mesmo tempo do fluxo que ela atende, mais uma pequena margem. No Shifter o padrão é 120 segundos e você pode defini-lo com ttl-<seconds>. Fluxos com mais de cerca de 30 minutos, e logins aos quais você retorna, pertencem a proxies de ISP.
A rotação de IPs reduz bloqueios?
Ela distribui a carga para que nenhum endereço único pareça movimentado demais, o que ajuda em requisições independentes. Rotacionar dentro de um fluxo faz o oposto: faz um único visitante parecer muitos, o que os sites costumam bloquear.
A rotação afeta o custo de banda?
Não diretamente, já que o tráfego residencial é cobrado por volume. Indiretamente, o modo errado causa fluxos que falham e novas tentativas, que são baixadas novamente e aumentam a conta.
Conclusão
Rotacione por requisição para trabalho independente, mantenha uma sessão fixa para cada fluxo que pertence junto, e use um IP de ISP fixo para qualquer coisa que dure horas ou envolva um login ao qual você retorna. Decida observando sua unidade de trabalho, não as configurações do proxy, dê a cada fluxo concorrente seu próprio ID de sessão, e fique atento aos sinais na tabela acima. Nosso explicador sobre como funciona a rotação de proxy residencial cobre a mecânica por trás de cada modo.