Antes de um proxy chegar perto do código da aplicação, vale a pena provar que ele funciona a partir de uma ferramenta que você possa inspecionar. cURL e Postman são as duas opções que a maioria dos desenvolvedores usa, e ambas lidam bem com proxies depois de configuradas, mas cada uma tem uma configuração que produz comportamento confuso se você não perceber. Aqui está a configuração funcional para as duas, as flags de depuração que importam e as armadilhas.
Os detalhes de conexão são os mesmos em todos os lugares: host p.shifter.io, porta 443, e um nome de usuário que carrega seu direcionamento. A referência de formato está em como se conectar a um proxy residencial.
cURL
A configuração inteira é uma flag.
curl -x customer-USERNAME:PASSWORD@p.shifter.io:443 https://ipinfo.io/json
-x e --proxy são a mesma coisa. Execute isso duas vezes e o endereço deve ser diferente, o que confirma tanto as credenciais quanto a rotação em um único passo.
O direcionamento vai no nome de usuário, então nada mais no comando muda:
# saída da Alemanha
curl -x customer-USERNAME-country-de:PASSWORD@p.shifter.io:443 https://ipinfo.io/json
# sessão sticky, dez minutos
curl -x customer-USERNAME-country-de-sid-abc123-ttl-600:PASSWORD@p.shifter.io:443 https://ipinfo.io/json
Mantendo credenciais fora do histórico do shell
Incorporar uma senha na URL a coloca no seu histórico e em qualquer listagem de processos. Duas opções melhores:
# credenciais passadas separadamente
curl -x p.shifter.io:443 -U customer-USERNAME-country-de:PASSWORD https://ipinfo.io/json
# ou a partir do ambiente
export PROXY_USER="customer-USERNAME-country-de"
export PROXY_PASS="..."
curl -x p.shifter.io:443 -U "$PROXY_USER:$PROXY_PASS" https://ipinfo.io/json
Observe que -U são credenciais do proxy e -u são credenciais para o site de destino. Confundir os dois é uma causa comum de um 407 com uma senha perfeitamente correta.
Flags de depuração que vale a pena conhecer
# ver o handshake do proxy e se a autenticação foi bem-sucedida
curl -v -x customer-USERNAME:PASSWORD@p.shifter.io:443 https://ipinfo.io/json
# detalhamento de tempo: para onde a latência realmente vai
curl -o /dev/null -s -w "connect: %{time_connect}s ttfb: %{time_starttransfer}s total: %{time_total}s\n" \
-x customer-USERNAME:PASSWORD@p.shifter.io:443 https://example.com
Esse segundo comando é a maneira mais rápida de separar uma conexão de proxy lenta de um destino lento, que é a primeira bifurcação em por que as requisições expiram e o ponto de partida para reduzir a latência.
SOCKS5 no cURL, e a armadilha
Se você usa SOCKS5 em vez de HTTP, o esquema importa mais do que parece:
# vaza DNS: sua máquina resolve o hostname
curl -x socks5://customer-USERNAME:PASSWORD@p.shifter.io:443 https://example.com
# correto: o proxy resolve
curl -x socks5h://customer-USERNAME:PASSWORD@p.shifter.io:443 https://example.com
O h é a diferença inteira, e errar isso significa que suas consultas DNS saem a partir da sua própria localização, o que pode retornar resultados regionalmente incorretos. Detalhes em prevenindo vazamentos de DNS.
Uma flag que nunca deve ir para produção
--proxy-insecure desativa a verificação de certificado no trecho do proxy. É ocasionalmente útil para confirmar que um erro de TLS é um problema de certificado e não outra coisa, e nunca deve aparecer em algo permanente.
Postman
O suporte a proxy do Postman é sólido, mas é configurado nas configurações da aplicação em vez de por requisição, o que surpreende quem espera encontrá-lo na própria requisição.
Configurando
Abra Settings, depois a aba Proxy. Desative a opção de proxy do sistema e ative a configuração de proxy personalizada. Defina o servidor de proxy como p.shifter.io e a porta como 443, marque tanto HTTP quanto HTTPS, depois ative a autenticação de proxy e insira seu nome de usuário, incluindo quaisquer flags de direcionamento, e sua senha.
Essa configuração é global para o aplicativo Postman, o que é importante ter em mente: uma vez definida, cada requisição em cada coleção passa pelo proxy até que você a desative. Se você também estiver testando serviços internos, eles serão roteados também, o que geralmente não é o que você deseja.
A configuração que quebra as coisas
Em Settings, depois General, há SSL certificate verification. Se você encontrar erros de certificado através do proxy e desativar isso, lembre-se de que você desativou a verificação para tudo que o Postman faz, não apenas para a requisição via proxy. Reative depois. Se você está vendo erros de certificado de qualquer forma, vale a pena entender o motivo em vez de simplesmente desativar.
Trocando o direcionamento sem redigitar
Como o direcionamento vive no nome de usuário, mudar de país significa editar um campo. As variáveis do Postman tornam isso menos tedioso: defina um ambiente com uma variável para o nome de usuário do proxy, depois troque de ambiente para trocar de mercado. A caixa de diálogo de configurações de proxy aceita a sintaxe de variável, então customer-USERNAME-country-{{market}} permite mudar de país trocando o ambiente ativo em vez de abrir as configurações a cada vez.
Verificando se funciona
Envie um GET para https://ipinfo.io/json e leia a resposta. Ela deve informar um endereço no país que você direcionou, não o seu próprio. Envie duas vezes sem sid no nome de usuário e o endereço deve mudar.
Se o endereço for o seu próprio, o proxy não está sendo aplicado de forma alguma: verifique se a configuração de proxy personalizada está realmente ativada e se tanto HTTP quanto HTTPS estão marcados.
O Collection Runner
Para testes em volume um pouco maior, o Collection Runner executará uma coleção repetidamente através da mesma configuração de proxy. Adicione um atraso entre as iterações em vez de executar no máximo, já que uma rajada de requisições idênticas é a maneira mais rápida de fazer um destino parar de responder, conforme limitação de taxa e throttling.
Quando algo falha
Quatro respostas cobrem quase tudo, e cada uma aponta para algo específico.
407 significa que as credenciais foram rejeitadas, ou que uma flag no nome de usuário está malformada, já que um valor não reconhecido torna o nome de usuário inteiro impossível de analisar. Teste o nome de usuário simples, sem flags, primeiro; se funcionar, adicione-as de volta uma de cada vez. Caminho completo em corrigindo erros 407.
502 significa que suas credenciais estavam corretas, mas nada correspondeu ao seu filtro naquele momento. Amplie-o, ou reduza de cidade para país.
509 significa que a largura de banda do plano está esgotada com o excedente desativado.
Conexão recusada ou travamento significa que você nunca alcançou o gateway. Verifique nc -vz p.shifter.io 443 antes de assumir um problema de proxy, e confirme que você não está apontando para um host legado.
O índice mais amplo está em erros comuns de proxy residencial.
Passando das ferramentas para o código
Uma vez que ambas as ferramentas funcionem, os mesmos quatro valores transferem-se diretamente para o que quer que você esteja construindo, e os padrões do lado do cliente estão em usando proxies residenciais com Python. Uma coisa que não se transfere: no código da aplicação, a reutilização de conexão significa que requisições enviadas por um túnel existente mantêm o mesmo endereço de saída, o que parece exatamente uma falha de rotação. Essa surpresa é abordada em IP não rotacionando.
Resumo
No cURL, tudo se resume ao -x, com -U para manter as credenciais fora da URL, -v para ver o handshake, e -w para descobrir se a lentidão é do proxy ou do destino; se você usar SOCKS5, use socks5h para que o DNS seja resolvido no proxy. No Postman, a configuração vive nas configurações da aplicação em vez de na requisição, então ela se aplica globalmente até que você a desative, e o alternador de verificação SSL é global ao aplicativo, não específico da requisição. Em ambos, o direcionamento vive no nome de usuário, então trocar de país nunca significa mudar host, porta, ou qualquer outra coisa. Prove que funciona em uma ferramenta que você possa inspecionar antes de colocá-lo no código, e leia as falhas pelo código de status.
O gateway por trás de tudo isso é proxies residenciais, um host e um par de credenciais em todos os países e modos de sessão, cobrado por GB para que os testes custem apenas a largura de banda que utilizam.