Wszystkie wpisy

Kontrola przekierowań i tryb surowego bufora

API FourA obsługuje teraz konfigurowalne limity przekierowań i surowe odpowiedzi binarne. Dwie opcje, które zmieniają sposób radzenia sobie ze skrajnymi przypadkami w rzeczywistym scrapingu.

Łańcuchy przekierowań psują scrapery. Odpowiedzi binarne ulegają uszkodzeniu podczas dekodowania jako tekst. Dwa problemy, które pojawiają się nieustannie, gdy wyjdziesz poza etap "pobierz stronę, sparsuj HTML".

Wdrożyliśmy dwie nowe opcje requestów, aby rozwiązać oba te problemy: followRedirects oraz returnBuffer. Są już dostępne w API.

Jak to działa

Kontrola przekierowań za pomocą followRedirects

Większość API do scrapingu obsługuje przekierowania jako wartość logiczną: podążaj za nimi lub nie. To działa, dopóki nie trafisz na pętlę przekierowań lub nie będziesz potrzebować samej pośredniej odpowiedzi 302, aby wyciągnąć parametr śledzący.

Parametr followRedirects w FourA przyjmuje liczbę całkowitą od 0 do 20. Pomiń go (lub ustaw 0), a otrzymasz z powrotem surową odpowiedź przekierowania, razem z nagłówkami. Ustaw go na 5, a request wykona do pięciu kroków, zanim zwróci to, na czym ostatecznie wyląduje.

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
  }'

To polecenie podąża za maksymalnie trzema przekierowaniami. Jeśli łańcuch zakończy się po dwóch, otrzymasz ostateczną stronę. Jeśli jest dłuższy niż trzy, otrzymasz to, co zwrócił trzeci krok.

Ta różnica ma większe znaczenie, niż mogłoby się wydawać. Strony e-commerce przekierowują przez śledzące adresy URL przed wylądowaniem na stronie produktu. Chcesz za nimi podążać. Jednak sieci afiliacyjne i skracacze linków tworzą czasem łańcuchy o głębokości sześciu, siedmiu czy ośmiu kroków. A niektóre pętle przekierowań nigdy się nie kończą. Ograniczenie do konkretnej liczby oznacza, że zbierasz dane bez utknięcia w nieskończonej pętli, która marnuje Twój timeout requestu.

Wcześniej obejściem było wysłanie requestu z wyłączonymi przekierowaniami, ręczne parsowanie nagłówka Location i wysłanie kolejnego requestu. To minimum dwa zapytania do API, dwukrotnie większe opóźnienie i kod, który musisz utrzymywać. Teraz to jedno zapytanie z określoną liczbą.

Surowe odpowiedzi binarne z returnBuffer

Gdy zbierasz obrazy, pliki PDF lub dane protobuf, dekodowanie tekstu niszczy te dane. Biblioteka HTTP zakłada, że odpowiedź jest tekstem, stosuje wykrywanie kodowania znaków i po cichu uszkadza każdy bajt, który nie pasuje. Protobuf staje się nieczytelny. Nagłówki obrazów ulegają uszkodzeniu. Kończysz z uszkodzonymi plikami i brakiem jasnego komunikatu o błędzie, który wyjaśniłby dlaczego.

returnBuffer mówi API, aby całkowicie pominęło dekodowanie tekstu.

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
  }'

Body response wraca jako surowe bajty (zakodowane w base64 w odpowiedziach JSON). Zdekoduj je po swojej stronie i otrzymasz dokładnie to, co wysłał serwer. Bez założeń dotyczących kodowania, bez konwersji znaków, bez cichego uszkadzania danych.

To było jedno z najczęstszych zgłoszeń do pomocy technicznej, jakie widzieliśmy: użytkownicy zbierający zdjęcia produktów lub katalogi PDF otrzymywali pliki, których nie dało się otworzyć. Rozwiązanie zawsze było takie samo, ale teraz zamiast obejścia mamy do tego dedykowaną flagę.

Wpływ

Obie funkcje zmniejszają liczbę zapytań do API na jedno zadanie. followRedirects eliminuje pętle ręcznego śledzenia przekierowań. returnBuffer eliminuje cykl "pobierz, zorientuj się, że dane są uszkodzone, pobierz ponownie z innymi ustawieniami".

W przypadku celów z dużą liczbą przekierowań (linki afiliacyjne, skracacze URL, łańcuchy śledzące e-commerce), we wczesnych testach zauważyliśmy spadek liczby requestów o 40-60%, gdy użytkownicy przeszli z ręcznej obsługi przekierowań na followRedirects. A w przypadku zadań związanych ze zbieraniem danych binarnych (zdjęcia produktów, pobieranie dokumentów), returnBuffer zamienia wieloetapowe obejście w jedną opcję (wczesne wyniki).

To nie są efekciarskie funkcje. To ten rodzaj rzeczy, o których nie myślisz, dopóki Twój scraper nie wyłoży się o 3 rano, bo strona dodała dodatkowy krok przekierowania w procesie zakupowym.

Dla zaawansowanych użytkowników

Połącz followRedirects z walidacją odpowiedzi, aby uzyskać precyzyjną kontrolę nad łańcuchami przekierowań. Podążaj za przekierowaniami, ale oznacz request jako nieudany, jeśli ostateczny cel napotka ścianę:

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"] }
    }
  }'

To polecenie podąża za maksymalnie pięcioma przekierowaniami, a następnie sprawdza ostateczną odpowiedź. Jeśli strona przekierowała Cię na stronę z CAPTCHA lub komunikat o braku dostępu, request po prostu kończy się błędem. Brak śmieciowych danych do odfiltrowania na dalszych etapach.

W przypadku zbierania danych binarnych, połącz returnBuffer z requestami HEAD, gdy musisz sprawdzić typ zawartości przed pobraniem dużych plików. FourA poprawnie obsługuje HEAD (zapobiegając wewnętrznie typowym błędom libcurl), więc możesz sprawdzić nagłówki bez pobierania body. Sprawdź Content-Type, zdecyduj, czy warto to pobierać, a następnie wykonaj pełny request z returnBuffer: true.

A jeśli używasz browser tasks dla celów z dużą ilością JavaScriptu, pamiętaj, że te opcje dotyczą bezpośredniego silnika HTTP. Requesty przeglądarkowe obsługują przekierowania poprzez wbudowaną nawigację Chrome, która domyślnie podąża za nimi bez żadnego limitu.

Co dalej

Pracujemy nad udostępnieniem większej liczby kontroli na poziomie requestu przez API: niestandardowej rozdzielczości DNS, dostrajania timeoutu dla poszczególnych faz oraz opcji obsługi certyfikatów. Celem jest pełna moc curl-impersonate poprzez czysty interfejs REST, bez narzutu infrastrukturalnego.

Jeśli potrzebujesz konkretnej opcji, chętnie jej wysłuchamy. Dashboard pokazuje już, jak radzą sobie Twoje requesty z tymi nowymi opcjami, więc możesz samodzielnie zmierzyć różnicę.