Najważniejsze informacje
Od samego początku FourA miało tylko jedne drzwi: wysyłasz nam URL, my zwracamy stronę. W tym tygodniu otworzyliśmy drugie: zwykły endpoint proxy, który wklejasz do dowolnego klienta HTTP, z danymi logowania wygenerowanymi w Dashboardzie. Proxy Finder nauczył się także sięgać po płatny węzeł wyjściowy w przypadku celów odrzucających wszystko inne, a tryb Auto lepiej zapamiętuje działające węzły.
Co nowego
Skieruj dowolnego klienta HTTP na nas
Nowa sekcja w Dashboardzie: ACCESS, a następnie Proxy. Utwórz użytkownika proxy, a strona wygeneruje dokładny connection string wraz z przykładami dla cURL, Pythona i Node. Wybierz typ węzła, kraj oraz to, czy zachować ten sam węzeł dla serii żądań. Parametry w connection stringu aktualizują się na bieżąco podczas dokonywania wyboru.
Po co to budować, skoro API już działa? Niektóre zadania to nie tylko prosty schemat request i response. Tunel przesyła bajty w czasie rzeczywistym: bez formatu JSON i bez buforowania. Tego właśnie wymaga duży plik lub strumień wideo, a nasze API nigdy nie miało tego robić.
Targetowanie na płatnych węzłach wyjściowych jest bardziej szczegółowe: region, miasto, sieć według nazwy ISP oraz czas przypisania węzła. Nasza własna pula celowo ogranicza się tylko do kraju. Miasto w kraju o słabym pokryciu to zaledwie kilka adresów, a filtr, który w większości przypadków zawodzi, jest gorszy niż brak filtra.
Mówiąc wprost, istnieje pewien kompromis. Przez zwykły tunel to Twój klient nawiązuje połączenie ze stroną, a nie my. Zadania wykonywane przez nasze API nie znajdują się na tej ścieżce: flaga unblocker, rozwiązywanie oparte na przeglądarce, reguły validate, session replay. Tunel zapewnia dostęp do naszych węzłów wyjściowych i przepustowości. API daje to, co na nich budujemy. Wybieraj odpowiednio do zadania, a nie do całej firmy.
Węzły Premium i odpowiedź informująca, który z nich obsłużył żądanie
/api/proxy przyjmuje teraz parametr exitClass: standard lub premium. Opcja Premium kieruje ruch przez płatny węzeł wyjściowy w przypadku celów, które stale blokują naszą własną pulę.
Jeśli nic nie podasz, otrzymasz auto: najpierw używana jest pula współdzielona, a płatny węzeł dołącza do wyszukiwania tylko wtedy, gdy standardowa pula napotyka problemy. Wskaż konkretną klasę, a zastosujemy się do niej ściśle. Opcja standard nigdy nie przełącza się samoczynnie na wyższy poziom, co stanowi sedno jej jawnego zdefiniowania.
Odpowiedź zawiera nagłówek exitClass, dzięki czemu zawsze wiesz, który węzeł obsłużył żądanie. Żądanie premium, na które nasza własna pula odpowiedziała jako pierwsza, zwraca wartość standard, co oznacza sukces, a nie downgrade. Jeśli Twój plan nie obejmuje opcji premium, request jest od razu odrzucany, zamiast po cichu trafiać do innego źródła.
Premium jest traktowane jako część Twojej przepustowości, a nie jako osobny licznik: wiersz w Quota, kolumna w Metrics, oznaczenie wiersza w Activity dla danego ruchu czy kafelek na karcie Overview. W sekcji Playground dodano odpowiednią kontrolkę, a jej pusta opcja ma kluczowe znaczenie: pozostawienie jej bez wyboru nie wysyła żadnego pola, ponieważ brak zapytania różni się od żądania zablokowania eskalacji.
Auto zapamiętuje skuteczne węzły
Mechanizm Auto zawsze rejestrował nieudane węzły wyjściowe. Teraz zapisuje także te, które pomyślnie dostarczyły dane, na każdym szczeblu drabiny, a nie tylko na poziomach przeglądarkowych. Odbywa się to dopiero po zaliczeniu tej samej weryfikacji, która decyduje o zwróceniu strony użytkownikowi. Węzeł wyjściowy nie może zostać oznaczony jako sprawny dla strony, której byśmy Ci nie zwrócili.
Blokady wygasają również według własnego harmonogramu. Wcześniej lista wykluczeń hosta odnawiała swój czas życia przy każdej nowej blokadzie; teraz każda blokada wygasa zgodnie z przypisanym jej czasem.
A gdy uruchomienie osiągnie limit przeglądarek w Twoim planie, drabina już się nie zatrzymuje. Przechodzi do szczebla proxy, a następnie zapisuje zwycięski węzeł wyjściowy w pamięci podręcznej, dzięki czemu kolejne wywołania odtwarzają go tanio w trybie Single.
Auto to nadal narzędzie do wyszukiwania ścieżki, a nie trasa produkcyjna. Pozwól mu ustalić, który szczebel zadziałał i zwrócić sesję, a następnie skieruj swój ruch bezpośrednio na /api/single lub /api/browser z tą sesją. Taka była koncepcja przy starcie Auto i nic z powyższego tego nie zmienia.
Strona, która nie jest tą, o którą prosiłeś
Niektóre węzły wyjściowe znajdują się w filtrowanych sieciach korporacyjnych, gdzie bramka sieciowa odpowiada zamiast właściwej witryny. Odpowiedź wraca z kodem 200 i treścią, przechodząc wszystkie dotychczasowe kontrole. Już nie: taka strona liczy się teraz jako dowód, że dany węzeł wyjściowy jest bezużyteczny, a nie jako dowód odpowiedzi witryny. Request przechodzi dalej, a węzeł traci status preferowanego.
Każdy wzorzec strony, który dopasowujemy, ma określony limit rozmiaru, więc prawdziwy dokument, który przypadkowo zawiera te same słowa, nie zostanie odrzucony. Rozmiar jest zabezpieczeniem, nigdy sygnałem. Pisaliśmy o szerszym kontekście tego problemu dwa tygodnie temu, gdy blokada wygląda jak punkt danych.
Pod maską
Rate limity są teraz sprawdzane względem limitu Twojego konta, zanim cokolwiek obciąży współdzielone zasoby. Nagły skok ruchu w ramach jednego konta jest odrzucany na poziomie jego własnego limitu, natychmiast, bez blokowania slotów, na które czekają inni.
Wskaźnik aktywnych operacji w panelu pochodzi z miernika na żywo, który każda instancja publikuje co sekundę, a nie z licznika, który mógłby rosnąć w nieskończoność. Panel i mechanizm limitujący odczytują teraz dokładnie tę samą wartość.
Liczby
W naszych testach otwarcie tunelu do hosta, dla którego znaleźliśmy już węzły wyjściowe, zajmowało od 63 do 672 ms na próbie kilkunastu pomiarów, z czego większość poniżej 260 ms. Pierwszy kontakt z nowym hostem trwa dłużej: sekundy, czasem kilkadziesiąt sekund, gdy pula jest przeszukiwana pod kątem działających węzłów dla danego celu. Dzieje się to raz na hosta, nie raz na request. Mała próba, nasze własne dane.
Dwa rozwiązania oznaczają pytanie, którego nie było w zeszłym tygodniu: czy w tym zadaniu chodzi o same bajty, czy o przejście przez zabezpieczenia? Przy przesyle dużego pliku tunel jest naszym najtańszym rozwiązaniem. Do wszystkiego trudniejszego nadal służy API.