Todos os posts

Controle de redirecionamento e modo Raw Buffer

A API da FourA agora suporta limites configuráveis de redirecionamento e respostas binárias brutas. Duas opções que mudam como você lida com casos extremos de scraping no mundo real.

Cadeias de redirecionamento quebram scrapers. Respostas binárias são corrompidas quando decodificadas como texto. Dois problemas que surgem constantemente quando 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 ativas na API.

Como funciona

Controle de redirecionamento com followRedirects

A maioria das APIs de scraping lida com redirecionamentos como um booleano: seguir ou não seguir. Isso funciona até você encontrar uma cadeia de redirecionamentos que entra em loop, ou quando você precisa 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. Se você omitir (ou definir como 0), você recebe de volta a resposta bruta do redirecionamento, incluindo todos os headers. Defina como 5, e a request seguirá até cinco saltos antes de retornar onde quer que tenha parado.

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer 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ê obtém a página final. Se for mais longa que três, você obtém o que o terceiro salto retornou.

A distinção importa mais do que você imagina. Sites de e-commerce redirecionam por meio de URLs de rastreamento antes de chegar à página do produto. Você quer segui-los. Mas redes de afiliados e encurtadores de URL às vezes criam cadeias que vão a seis, sete, oito saltos de profundidade. E alguns loops de redirecionamento nunca se resolvem. Limitar a um número específico significa que você coleta dados sem ficar preso em um loop infinito que queima seu tempo limite de request.

Antes disso, a solução alternativa era enviar uma request com redirecionamentos desativados, analisar manualmente o header Location e enviar outra request. Isso significa no mínimo duas chamadas de API, o dobro da latência e código que você precisa manter. Agora é uma chamada com um número.

Respostas binárias brutas com returnBuffer

Quando você está coletando imagens, PDFs ou payloads do protobuf, a decodificação de texto destrói os dados. A biblioteca HTTP assume que a resposta é texto, aplica a detecção de conjunto de caracteres e silenciosamente distorce cada byte que não se encaixa. O Protobuf se torna ilegível. Cabeçalhos de imagem quebram. Você acaba com arquivos corrompidos e sem nenhuma mensagem de erro óbvia para explicar o motivo.

returnBuffer informa à API para pular totalmente a decodificação de texto.

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://example.com/product-image.jpg",
    "returnBuffer": true
  }'

O corpo da response volta como bytes brutos (codificados 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.

Esse foi um dos tickets de suporte mais comuns que vimos: 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 há uma flag para isso em vez de uma solução alternativa.

Impacto

Ambas as funcionalidades reduzem o número de chamadas de API por trabalho. followRedirects elimina loops manuais de perseguição 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 as contagens de request caírem de 40 a 60% em testes iniciais quando os usuários mudam do manuseio manual de redirecionamentos para o 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).

Essas não são funcionalidades chamativas. Elas são o tipo de coisa que você não pensa até o seu scraper quebrar às 3 da manhã porque um site adicionou um salto de redirecionamento extra ao seu fluxo de checkout.

Para usuários avançados

Combine followRedirects com a validação de response para controle preciso sobre as cadeias de redirecionamento. Siga redirecionamentos, mas faça a request falhar se o destino final encontrar uma parede:

curl -X POST "https://eu.api.foura.ai/v1/request" \
  -H "Authorization: Bearer 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 verifica a response final. Se o site redirecionou você para uma página de CAPTCHA ou uma tela de acesso negado, a request falha perfeitamente. Sem dados de lixo para filtrar a jusante.

Para a coleta de binários, combine returnBuffer com requests HEAD quando você precisar verificar os tipos de conteúdo antes de baixar arquivos grandes. A FourA lida com HEAD corretamente, para que você possa inspecionar headers sem buscar o corpo. Verifique o Content-Type, decida se vale a pena baixar e faça a request completa com returnBuffer: true.

E se você estiver usando tarefas de navegador para alvos com muito JavaScript, observe que essas opções se aplicam ao mecanismo HTTP direto. As requests de navegador lidam com redirecionamentos por meio da navegação integrada do navegador, que os segue por padrão sem limite.

O que vem a seguir

Estamos trabalhando para expor mais controles no nível da request através da API: resolução de DNS personalizada, ajuste de timeout por fase e opções de manuseio de certificados. O objetivo é potência total de unblocker através de uma interface REST limpa, sem a sobrecarga de infraestrutura.

Se há uma opção específica de que você precisa, estamos ouvindo. O dashboard já mostra como as suas requests atuam com estas novas opções, para que você mesmo possa medir a diferença.