Łańcuchy przekierowań psują scrapery. Odpowiedzi binarne ulegają uszkodzeniu przy dekodowaniu jako tekst. To dwa problemy, które pojawiają się nieustannie, gdy miniesz etap pobierania strony i parsowania HTML.
Wdrożyliśmy dwie nowe opcje requestów do obsługi obu przypadków: followRedirects i 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 albo nie. To działa do momentu trafienia na zapętlony łańcuch przekierowań lub gdy potrzebujesz samej pośredniej odpowiedzi 302, aby wyodrębnić parametr śledzący.
Parametr followRedirects w FourA przyjmuje liczbę całkowitą od 0 do 20. Pomiń go (lub ustaw 0), a otrzymasz surową odpowiedź przekierowania, łącznie z nagłówkami. Ustaw wartość 5, a request podąży za maksymalnie pięcioma przeskokami, zanim zwróci docelowy wynik.
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
}'
Obsługuje to do trzech przekierowań. Jeśli łańcuch zakończy się po dwóch, otrzymasz stronę docelową. Jeśli jest dłuższy niż trzy, otrzymasz odpowiedź zwróconą przez trzeci przeskok.
Ta różnica ma większe znaczenie, niż mogłoby się wydawać. Serwisy e-commerce przekierowują przez adresy śledzące przed załadowaniem strony produktu. Chcesz za nimi podążać. Jednak sieci afiliacyjne i skracacze linków tworzą czasem łańcuchy sięgające sześciu, siedmiu lub ośmiu przeskoków. Niektóre pętle przekierowań nie rozwiązują się wcale. Ograniczenie do określonej liczby pozwala zbierać dane bez ryzyka utknięcia 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. Oznacza to minimum dwa wywołania API, dwukrotnie większe opóźnienie i kod, który trzeba utrzymywać. Teraz wystarczy jedno wywołanie z określoną liczbą.
Surowe odpowiedzi binarne za pomocą returnBuffer
Podczas pobierania obrazów, plików PDF lub ładunków protobuf dekodowanie tekstu niszczy dane. Biblioteka HTTP zakłada, że odpowiedź jest tekstem, stosuje wykrywanie zestawu znaków i po cichu uszkadza każdy bajt, który do niego nie pasuje. Protobuf staje się nieczytelny. Nagłówki obrazów ulegają uszkodzeniu. Kończy się to uszkodzonymi plikami i brakiem jasnego komunikatu o błędzie, który wyjaśniłby przyczynę.
returnBuffer instruuje API, aby całkowicie pominęło dekodowanie tekstu.
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
}'
Ciało odpowiedzi wraca jako surowe bajty (zakodowane w base64 w odpowiedziach JSON). Zdekoduj je po swojej stronie i masz dokładnie to, co wysłał serwer. Bez domysłów dotyczących zestawu znaków, bez konwersji kodowania, bez cichego uszkadzania danych.
To było 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 dało się otworzyć. Rozwiązanie zawsze było takie samo, ale teraz zamiast obejścia jest do tego dedykowana flaga.
Wpływ
Obie funkcje zmniejszają liczbę wywołań API na zadanie. followRedirects eliminuje ręczne pętle śledzenia przekierowań. returnBuffer eliminuje cykl „pobierz, zauważ uszkodzenie, pobierz ponownie z innymi ustawieniami”.
W przypadku celów z dużą liczbą przekierowań (linki afiliacyjne, skracacze URL, łańcuchy śledzenia e-commerce) zaobserwowaliśmy spadek liczby żądań o 40-60% we wczesnych testach po przejściu z ręcznej obsługi przekierowań na followRedirects. A w przypadku zadań zbierania plików binarnych (zdjęcia produktów, pobieranie dokumentów), returnBuffer zamienia wieloetapowe obejście w pojedynczą opcję (wczesne wyniki).
To nie są krzykliwe funkcje. To rzeczy, o których nie myślisz, dopóki twój scraper nie padnie o 3 nad ranem, bo strona dodała dodatkowy przeskok przekierowania w procesie kasy.
Dla zaawansowanych użytkowników
Połącz followRedirects z walidacją odpowiedzi, aby uzyskać precyzyjną kontrolę nad łańcuchami przekierowań. Śledź przekierowania, ale przerywaj żądanie błędem, jeśli ostateczny cel napotka barierę:
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"] }
}
}'
Rozwiązanie to podąża za maksymalnie pięcioma przekierowaniami, a następnie sprawdza ostateczną odpowiedź. Jeśli witryna przekierowała Cię na stronę weryfikacji lub blokadę odmowy dostępu, żądanie kończy się czystym błędem. Brak bezużytecznych danych do odfiltrowania na dalszych etapach.
W przypadku pobierania plików binarnych połącz returnBuffer z żądaniami HEAD, gdy musisz sprawdzić typy zawartości przed pobraniem dużych plików. FourA poprawnie obsługuje HEAD, więc możesz zweryfikować nagłówki bez pobierania treści (body). Sprawdź Content-Type, zdecyduj, czy warto pobierać plik, a następnie wykonaj pełne żądanie za pomocą returnBuffer: true.
A jeśli używasz browser tasks dla celów mocno opartych na JavaScript, pamiętaj, że te opcje dotyczą bezpośredniego silnika HTTP. Żądania w przeglądarce obsługują przekierowania za pośrednictwem wbudowanej nawigacji przeglądarki, która domyślnie podąża za nimi bez limitu.
Co dalej
Pracujemy nad udostępnieniem większej liczby opcji kontroli na poziomie żądań w API: niestandardowego rozpoznawania nazw DNS, dostrajania limitów czasu (timeout) dla poszczególnych faz oraz opcji obsługi certyfikatów. Celem jest pełna kontrola nad profilem przeglądarki za pośrednictwem przejrzystego interfejsu REST, bez narzutu infrastrukturalnego.
Jeśli potrzebujesz konkretnej opcji, chętnie Cię wysłuchamy. dashboard pokazuje już, jak Twoje żądania działają z nowymi opcjami, dzięki czemu możesz samodzielnie zmierzyć różnicę.