Cadeias de redirecionamento quebram scrapers. Respostas binárias se corrompem quando decodificadas como texto. Dois problemas que surgem constantemente depois que você passa da fase de "buscar uma página, analisar o HTML".
Lançamos duas novas opções de request para lidar com ambos: followRedirects e returnBuffer. Elas já estão disponíveis na API.
Como Funciona
Controle de Redirecionamento com followRedirects
A maioria das APIs de scraping trata redirecionamentos como um booleano: seguir ou não. Isso funciona até você encontrar uma cadeia de redirecionamentos em loop, ou precisar da própria resposta 302 intermediária para extrair um parâmetro de rastreamento.
O followRedirects da FourA aceita um número inteiro entre 0 e 20. Omita o parâmetro (ou defina 0) e você receberá a resposta de redirecionamento bruta de volta, com headers e tudo mais. Defina como 5, e a request seguirá até cinco saltos antes de retornar onde quer que ela pare.
curl -X POST "https://eu.api.foura.ai/v1/request" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/short-link",
"followRedirects": 3,
"unblocker": true
}'
Isso segue até três redirecionamentos. Se a cadeia for resolvida em dois, você recebe a página final. Se for maior que três, você recebe o que o terceiro salto retornou.
A distinção importa mais do que parece. Sites de e-commerce redirecionam através de URLs de rastreamento antes de chegar à página do produto. Você quer seguir esses links. Mas redes de afiliados e encurtadores de URL às vezes criam cadeias de seis, sete ou oito saltos de profundidade. E alguns loops de redirecionamento nunca são resolvidos. Limitar a um número específico significa que você coleta dados sem ficar preso em um loop infinito que esgota o seu timeout de request.
Antes disso, a solução alternativa era enviar uma request com redirecionamentos desativados, fazer o parse manual do header Location e enviar outra request. Isso representa no mínimo duas chamadas de API, o dobro de latência e código adicional para você manter. Agora é apenas uma chamada com um número.
Raw Binary Responses with returnBuffer
Ao coletar imagens, PDFs ou payloads protobuf, a decodificação de texto corrompe os dados. A biblioteca HTTP assume que a response é texto, aplica a detecção de charset e corrompe silenciosamente qualquer byte incompatível. O protobuf se torna ilegível. Os headers de imagem quebram. O resultado são arquivos corrompidos sem nenhuma mensagem de erro clara para explicar o motivo.
returnBuffer instrui a API a ignorar completamente a decodificação de texto.
curl -X POST "https://eu.api.foura.ai/v1/request" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/product-image.jpg",
"returnBuffer": true
}'
O corpo da resposta retorna como bytes brutos (codificado em base64 em respostas JSON). Decodifique-o do seu lado e você terá exatamente o que o servidor enviou. Sem suposições de charset, sem conversão de codificação, sem corrupção silenciosa.
Este era um dos chamados de suporte mais comuns que víamos: usuários coletando imagens de produtos ou catálogos em PDF e recebendo arquivos que não abriam. A correção era sempre a mesma, mas agora existe uma flag dedicada em vez de uma solução alternativa.
Impacto
Ambos os recursos reduzem o número de chamadas de API por job. followRedirects elimina loops manuais de rastreamento de redirecionamento. returnBuffer elimina o ciclo de "buscar, perceber que está corrompido, buscar novamente com configurações diferentes".
Para alvos com muitos redirecionamentos (links de afiliados, encurtadores de URL, cadeias de rastreamento de e-commerce), vimos a contagem de requests cair de 40 a 60% em testes iniciais quando os usuários mudam o tratamento manual de redirecionamento para followRedirects. E para tarefas de coleta de binários (imagens de produtos, downloads de documentos), returnBuffer transforma uma solução alternativa de várias etapas em uma única opção (resultados iniciais).
Estes não são recursos chamativos. São o tipo de coisa em que você não pensa até o seu scraper quebrar às 3h da manhã porque um site adicionou um salto extra de redirecionamento ao fluxo de checkout.
Para Usuários Avançados
Combine followRedirects com validação de resposta para controle preciso sobre cadeias de redirecionamento. Siga os redirecionamentos, mas falhe a request se o destino final encontrar um bloqueio:
curl -X POST "https://eu.api.foura.ai/v1/request" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/product/12345",
"followRedirects": 5,
"unblocker": true,
"validate": {
"status": { "fail": [403, 503] },
"data": { "fail": ["Access Denied", "captcha"] }
}
}'
Isso segue até cinco redirecionamentos e, em seguida, verifica a resposta final. Se o site redirecionou você para uma página de verificação ou para uma barreira de acesso negado, a request falha de forma limpa. Sem dados inúteis para filtrar downstream.
Para coleta de binários, combine returnBuffer com requests HEAD quando você precisar verificar os tipos de conteúdo antes de baixar arquivos grandes. O FourA lida com HEAD corretamente, permitindo que você inspecione headers sem buscar o body. Verifique o Content-Type, decida se vale a pena baixar e faça a request completa com returnBuffer: true.
E se você estiver usando browser tasks para alvos com muito JavaScript, observe que essas opções se aplicam ao mecanismo HTTP direto. Browser requests gerenciam redirecionamentos por meio da navegação nativa do navegador, que os segue por padrão sem limite.
O que vem a seguir
Estamos trabalhando para expor mais controles a nível de request pela API: resolução DNS personalizada, ajuste de timeout por fase e opções de manipulação de certificados. O objetivo é oferecer controle total do perfil do navegador por meio de uma interface REST limpa, sem a sobrecarga de infraestrutura.
Se houver uma opção específica de que você precisa, estamos à disposição. O dashboard já mostra o desempenho das suas requests com essas novas opções, permitindo que você mesmo meça a diferença.