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 obsługi rzeczywistych przypadków brzegowych podczas scrapowania.

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

Wprowadziliśmy dwie nowe opcje żądań, aby obsłużyć oba te przypadki: followRedirects i returnBuffer. Są już dostępne w API.

Jak to działa

Kontrola przekierowań z followRedirects

Większość API do scrapowania traktuje przekierowania zero-jedynkowo: podążaj za nimi lub nie. To działa, dopóki nie trafisz na zapętlony łańcuch przekierowań lub nie potrzebujesz samej odpowiedzi 302, aby wyciągnąć parametr śledzący.

Opcja followRedirects w FourA przyjmuje liczbę całkowitą od 0 do 20. Pomiń ją (lub ustaw na 0), a otrzymasz surową odpowiedź z przekierowania wraz z nagłówkami. Ustaw ją na 5, a żądanie wykona do pięciu skoków przed zwróceniem ostatecznego wyniku.

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

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

Ta różnica ma większe znaczenie, niż mogłoby się wydawać. Witryny e-commerce przekierowują przez śledzące URL przed dotarciem do strony produktu. Chcesz za nimi podążać. Jednak sieci afiliacyjne i skracacze linków czasami tworzą łańcuchy o głębokości sześciu, siedmiu lub ośmiu skoków. Niektóre pętle przekierowań nigdy się nie kończą. Ustawienie górnego limitu pozwala zbierać dane bez utykania w nieskończonej pętli, która wyczerpuje limit czasu żądania.

Wcześniej obejściem było wysyłanie żądania z wyłączonymi przekierowaniami, ręczne parsowanie nagłówka Location i wysyłanie kolejnego żądania. To co najmniej dwa wywołania API, dwukrotnie większe opóźnienie i kod, który trzeba utrzymywać. Teraz to jedno wywołanie z odpowiednią liczbą.

Surowe odpowiedzi binarne z returnBuffer

Kiedy pobierasz obrazy, pliki PDF lub ładunki protobuf, dekodowanie tekstu niszczy dane. Biblioteka HTTP zakłada, że odpowiedź jest tekstem, stosuje wykrywanie zestawu znaków i po cichu zniekształca 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śniałby przyczynę.

Opcja returnBuffer nakazuje API całkowite pominięcie dekodowania 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
  }'

Ciało odpowiedzi wraca jako surowe bajty (zakodowane w base64 w odpowiedziach JSON). Zdekoduj je po swojej stronie, a otrzymasz dokładnie to, co wysłał serwer. Żadnych założeń co do zestawu znaków, konwersji kodowania ani cichego uszkadzania danych.

Było to jedno z częstszych zgłoszeń do pomocy technicznej. Użytkownicy pobierali zdjęcia produktów lub katalogi PDF i otrzymywali pliki, których nie można było otworzyć. Rozwiązanie zawsze było to samo, ale teraz istnieje dedykowana flaga zamiast konieczności stosowania obejść.

Efekty

Obie funkcje zmniejszają liczbę wywołań API na zadanie. Opcja followRedirects eliminuje ręczne pętle śledzenia przekierowań. Opcja returnBuffer eliminuje cykl pobierania, wykrywania uszkodzeń i ponownego pobierania z innymi ustawieniami.

W przypadku celów z dużą liczbą przekierowań (linki afiliacyjne, skracacze URL, łańcuchy śledzenia w e-commerce) we wczesnych testach zaobserwowaliśmy spadek liczby żądań od 40 do 60 procent, gdy użytkownicy przeszli z ręcznej obsługi przekierowań na followRedirects. W przypadku zadań pobierania danych binarnych (obrazy produktów, pobieranie dokumentów), returnBuffer zamienia wieloetapowe obejście w pojedynczą opcję.

Nie są to błyskotliwe funkcje. To typ rzeczy, o których nie myślisz, dopóki twój scraper nie zepsuje się o trzeciej nad ranem, ponieważ witryna dodała dodatkowy skok przekierowania do procesu płatności.

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 żądanie jako nieudane, jeśli docelowa lokalizacja natrafi na blokadę:

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 żądanie podąża za maksymalnie pięcioma przekierowaniami, a następnie sprawdza ostateczną odpowiedź. Jeśli witryna przekierowała cię na stronę z CAPTCHA lub zablokowała dostęp, żądanie po prostu kończy się błędem. Brak śmieciowych danych do odfiltrowania na dalszym etapie.

W przypadku pobierania danych binarnych, połącz returnBuffer z żądaniami HEAD, gdy musisz sprawdzić typy zawartości przed pobraniem dużych plików. FourA poprawnie obsługuje żądania HEAD, co pozwala zbadać nagłówki bez pobierania ciała odpowiedzi. Sprawdź Content-Type, zdecyduj, czy warto to pobierać, a następnie wykonaj pełne żądanie za pomocą returnBuffer: true.

Jeśli używasz zadań przeglądarki browser tasks dla celów opartych na JavaScript, pamiętaj, że te opcje dotyczą bezpośredniego silnika HTTP. Żądania w przeglądarce obsługują przekierowania poprzez wbudowaną nawigację, która domyślnie podąża za nimi bez limitu.

Co dalej

Pracujemy nad udostępnieniem większej kontroli na poziomie żądań za pośrednictwem API (niestandardowe rozwiązywanie DNS, dostrajanie limitów czasu dla poszczególnych faz oraz opcje obsługi certyfikatów). Celem jest pełna moc odblokowywania za pomocą czystego interfejsu REST bez narzutu infrastrukturalnego.

Jeśli potrzebujesz konkretnej opcji, daj nam znać. Panel użytkownika dashboard pokazuje już, jak twoje żądania działają z nowymi opcjami, dzięki czemu możesz samodzielnie zmierzyć różnicę.