O que há de novo
Basta uma letra faltando. Digite -contry-de no nome de usuário do proxy e o erro de digitação fica visível, parecendo exatamente uma opção funcional.
A porta de proxy da FourA responde a isso com um 400 que lista todas as chaves reconhecidas. Esse é um pequeno detalhe de um produto que saiu da versão beta em 15 de setembro: uma URL de proxy em nossas saídas para qualquer cliente compatível (um navegador, uma ferramenta de download, o scraper que você já executa), sem necessidade de escrever chamadas de API. Você cria um usuário de proxy no Dashboard, cola a string, e os túneis e o tráfego são contabilizados no seu plano da mesma forma que as requisições de API.
Aqui está toda a estrutura e o motivo de cada regra existir.
Como funciona
A porta opera em proxy.foura.ai:34004 e utiliza HTTP CONNECT com autenticação Basic para destinos nas portas 443 e 80. As credenciais são usuários de proxy, separados da sua chave de API por design: o handshake do proxy trafega em texto não criptografado, e um usuário de proxy pode ter a senha redefinida sem que ninguém precise alterar a integração da sua API.
Tudo após a credencial é uma lista de pares -key-value, em qualquer ordem:
# Shared network, a German address, one sticky session for this job
curl -x "http://USERNAME-country-de-session-job42:PASSWORD@proxy.foura.ai:34004" \
https://example.com
# Premium network, an Android address in Germany, held 30 minutes
curl -x "http://USERNAME-network-premium-country-de-os-android-session-s1-lifetime-30:PASSWORD@proxy.foura.ai:34004" \
https://example.com
Shared representa as saídas próprias da FourA: o padrão e incluído no seu plano. Premium são endereços residenciais, obtidos do tráfego premium do seu plano mais qualquer volume adquirido. Na rede compartilhada, -fallback-premium permite que uma conexão migre para uma saída premium quando a compartilhada não puder atendê-la. O recurso fica desativado a menos que você solicite, e só é acionado enquanto houver cota premium restante. Ativá-lo por padrão significaria decidir, em seu nome, consumir essa cota.
Country pode ser repetido, portanto -country-de-country-fr representa um escopo de dois países. Região, cidade, rede por número de AS, dispositivo (windows, android, ios, mac) e lifetime (3 a 1440 minutos) são exclusivos do premium. Solicite uma cidade na rede compartilhada e você receberá um 400 em vez de uma tentativa de melhor esforço. O Shared é selecionado por país e nada mais específico, pois um filtro de cidade que quase nunca pode ser atendido é pior do que nenhum filtro.
-session-<name> (1 a 32 letras, dígitos ou sublinhados) torna as conexões persistentes: toda conexão que carrega esse nome compartilha um endereço. No shared, o endereço se mantém em uma janela deslizante de dez minutos, durando enquanto você continuar usando. No premium, ele se mantém pelo lifetime definido por você, ou pelo padrão da rede. Omita a sessão e cada conexão sairá de um novo endereço.
Existem também os padrões salvos. O direcionamento salvo em um usuário de proxy no Dashboard se aplica a todas as conexões que ele fizer, permitindo que a string seja reduzida apenas à credencial básica. O nome de usuário ainda tem precedência para a sua própria conexão, e any remove um valor salvo: -city-any consulta uma chave que memoriza Munique para toda a Alemanha. Clientes capazes de incluir headers em um CONNECT (o curl permite, com --proxy-header) podem enviar as mesmas opções como X-Foura-Country, X-Foura-Session e as demais, e um header tem prioridade sobre o nome de usuário.
Impacto
A maior parte disso se traduz em dúvidas que você não precisa mais ter.
Por que fui recusado? Toda recusa após a validação das suas credenciais traz um header X-Foura-Error com o motivo em uma linha. Um 400 indica a opção e os valores aceitos. Um 429 informa qual limite do seu plano foi atingido: túneis abertos simultaneamente, aberturas de túneis por minuto ou tráfego padrão para o período de faturamento.
A quem pertence a cota? À conta. Túneis e aberturas são contabilizados por conta em vez de por usuário de proxy, portanto uma segunda credencial não concede uma segunda cota. Os bytes são contabilizados na largura de banda do seu plano, e os bytes premium na sua cota premium dentro desse total, nunca somados a ele. Em um plano vendido por créditos, a porta tem seus próprios gigabytes inclusos, que a página de Faturamento recarrega. Nada é cobrado quando nenhum túnel é aberto.
Quem é o proprietário da credencial? Agora ela pode pertencer a uma organização, garantindo que o downloader de uma empresa não pare no dia em que alguém sai da equipe. Membros a utilizam e visualizam sua senha; administradores e proprietários podem alternar, desativar ou redefinir seu direcionamento; apenas o proprietário pode transferi-la.
O que ele fez? Mude a chave de Product em Overview, Metrics ou Activity para Proxy: túneis nas mesmas classes de resultado das suas API requests, quantos estão abertos agora, tempo de configuração e tráfego, divididos por proxy user, destino, país de saída ou IP do cliente. Uma sessão que já tem seu endereço geralmente se conecta em bem menos de um segundo.
Mas a porta é um canal direto, e esse é o trade-off. Seu cliente conversa com o site através do túnel, portanto o unblocker, suas validate rules e a resolução de desafios baseada em navegador não estão nesse caminho. Ela também mede bytes: uma página de recusa que chega por um túnel aberto conta bytes como qualquer outra, enquanto na API uma request que não tem sucesso não é faturada. Trafegue bytes pela porta; envie as páginas que oferecem resistência para a API.
Para Usuários Avançados
Assim que a cota premium se esgota, as três rotas para essa rede recebem três respostas diferentes, intencionalmente. Uma conexão que especifica -network-premium é recusada com um 403 explícito, pois um cliente atendido silenciosamente de outro local continuaria tentando e depois procuraria na fatura por uma linha premium que nunca aparece. O fallback simplesmente não é acionado, e um padrão premium salvo no proxy user passa para a rede compartilhada, permitindo que o túnel ainda abra. Nenhuma dessas opções escolheu gastar nessa conexão.
Três combinações são recusadas diretamente em vez de parcialmente aceitas: segmentação mais refinada na rede compartilhada, -fallback-premium junto com -network-premium e segmentação mais refinada enquanto um fallback estiver ativo. A porta aceita apenas CONNECT, portanto um cliente que encaminha uma request http:// simples em vez de criar um túnel recebe 405 (o curl cria o túnel com --proxytunnel). E um navegador controlado através da porta deve sempre carregar um nome de sessão, já que o carregamento de uma única página abre dezenas de conexões.
Vários workers, cada um no seu próprio endereço? Dê a cada um o seu próprio nome de sessão:
import requests
TEMPLATE = "http://USERNAME-country-de-session-{name}:PASSWORD@proxy.foura.ai:34004"
def worker_session(name):
proxy = TEMPLATE.format(name=name)
s = requests.Session()
s.proxies = {"http": proxy, "https": proxy}
return s
workers = [worker_session(f"w{i}") for i in range(4)]
print(workers[0].get("https://example.com").status_code)
O Dashboard faz o mesmo em escala: configure Sticky, escolha a quantidade e a aba Connection string lista uma linha por endereço, como uma URL ou como host:port:user:pass para gerenciadores de proxy. Tem dúvidas sobre uma recusa? Adicione -sv à chamada curl e direcione com pipe para 2>&1 | grep -i x-foura-error. Cada opção está na referência de portas de proxy, e a parte do Dashboard em Proxy Users.
O que vem a seguir
O primeiro cliente que construímos sobre proxy users é o nosso próprio. A extensão FourA para o Chrome roteia seu navegador por um deles: escolha a rede e o país, ative o botão e uma linha de status mostra o endereço que os sites visualizam. É uma versão beta, indisponível na Chrome Web Store, instalada a partir de Tools no Dashboard em modo de desenvolvedor. Mais adiante, o faturamento por organização está no roadmap público, o que é relevante aqui porque o proxy user de uma organização cobra de quem é o proprietário dessa organização hoje.
Uma URL de proxy é o contrato de integração mais antigo que existe, e todas as ferramentas que você possui já se comunicam com ela. A parte que realmente importava acertar nunca foi o túnel. É o que a string à frente dele tem permissão para significar, e o que acontece quando você erra a configuração.