← Todos os posts

Porta de Proxy: Segmentação e Sessões no Nome de Usuário

A porta de proxy da FourA lê rede, país e sessões persistentes a partir do nome de usuário, e um erro de digitação retorna um 400 listando as chaves válidas. Veja aqui toda a gramática.

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 conhecidas. Esse é um pequeno detalhe de um produto que saiu da versão beta em 15 de setembro: uma URL de proxy em nossos pontos de saída para qualquer cliente compatível (um navegador, uma ferramenta de download, o scraper que você já executa), sem precisar escrever nenhuma chamada 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 fica em proxy.foura.ai:34004 e opera com HTTP CONNECT usando autenticação Basic, para destinos nas portas 443 e 80. As credenciais são usuários de proxy, intencionalmente separados da sua chave de API: o handshake do proxy trafega em texto não criptografado, e um usuário de proxy pode receber uma nova senha sem que ninguém precise alterar sua integração de 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, extraídos do tráfego premium do seu plano mais o adicional comprado. Na rede shared, -fallback-premium permite que uma conexão migre para uma saída premium quando a shared não conseguir atendê-la. 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, gastar essa cota.

Country pode ser repetido, portanto -country-de-country-fr é 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. Se você solicitar uma cidade na rede shared, receberá um 400 em vez de um best effort. 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 underscores) torna as conexões persistentes (sticky): toda conexão com 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 solicita uma chave que lembra Munique para toda a Alemanha. Clientes que suportam headers em um CONNECT (o curl suporta, com --proxy-header) podem enviar as mesmas opções como X-Foura-Country, X-Foura-Session e as demais, e o header tem precedência sobre o nome de usuário.

Impact

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 verificação das suas credenciais inclui um header X-Foura-Error com o motivo em uma linha. Um erro 400 indica a opção e os valores aceitos por ela. Um erro 429 indica qual limite do seu plano foi atingido: túneis abertos simultaneamente, aberturas de túnel por minuto ou tráfego padrão no período de faturamento.

De quem é a cota? Da conta. Túneis e aberturas são contabilizados por conta e não por usuário de proxy, portanto uma segunda credencial não concede uma segunda cota. Os bytes contam para a largura de banda do seu plano, e os bytes premium contam para a sua cota premium dentro desse total, nunca somados a ele. Em planos vendidos por créditos, a porta tem seus próprios gigabytes inclusos, recarregados pela página Billing. Nada é cobrado quando nenhum túnel é aberto.

Quem é o dono da credencial? Agora pode ser uma organização, evitando que o downloader de uma empresa pare no dia em que alguém sair da equipe. Membros podem usá-la e ver sua senha; administradores e proprietários podem alternar, desativar ou redefinir o direcionamento dela; 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 que suas requisições de API, 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á possui seu endereço geralmente se conecta em bem menos de um segundo.

Mas a porta é um pipe, e esse é o trade-off. Seu cliente se comunica com o site através do túnel, portanto, perfis de navegador, suas regras de validação e o tratamento de páginas interativas não estão nesse caminho. Ela também mede bytes: uma página de recusa que chega por um túnel aberto são bytes como quaisquer outros, enquanto na API uma requisição sem 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 é consumida, as três rotas para essa rede recebem três respostas diferentes, de propósito. Uma conexão que especifica -network-premium é recusada com um 403 informando isso, porque um chamador atendido silenciosamente por outro lugar continuaria solicitando e depois procuraria na fatura 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 serem atendidas parcialmente: segmentação mais precisa na rede compartilhada, -fallback-premium junto com -network-premium, e segmentação mais precisa enquanto um fallback está armado. A porta aceita apenas CONNECT, portanto, um cliente que encaminha uma requisição http:// simples em vez de encapsulá-la em um túnel recebe 405 (o cURL cria o túnel com --proxytunnel). E um navegador controlado pela porta deve sempre conter um nome de sessão, já que o carregamento de uma única página abre dezenas de conexões.

Vários workers, cada um em seu próprio endereço? Atribua a cada um 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: defina 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. Em dúvida sobre uma recusa? Adicione -sv à chamada curl e faça um pipe para 2>&1 | grep -i x-foura-error. Todas as opções estão 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 do FourA para Chrome roteia seu navegador através de um deles: escolha a rede e o país, ative a chave e uma linha de status mostra o endereço que os sites veem. É uma versão beta, fora da 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 fatura para quem for 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ê utiliza 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.