Co nowego
Endpoint /api/auto to teraz najkrótsza droga do uzyskania działającej odpowiedzi dla dowolnego URL. Wskaż cel. Auto samo wybiera, czy obsłużyć request przez Single, Proxy Finder czy Browser, radzi sobie z zabezpieczeniami anti-bot po ich napotkaniu i zwraca sesję gotową do ponownego użycia przy kolejnym wywołaniu.
Jeden endpoint. Dowolny cel. Zero przełączania trybów po Twojej stronie.
To cała koncepcja. Reszta tego posta opisuje, jak to działa, ile kosztuje i na co warto uważać.
Jak to działa
Pod Auto kryje się kaskada poziomów (od najtańszych do najdroższych). Przy każdym requeście Auto przechodzi przez kolejne szczeble, aż któryś zwróci response akceptowany przez Twoje reguły validate.
Kolejne poziomy:
- Zapisana sesja w cache. Jeśli Auto ma aktywną sesję dla danego hosta z poprzedniego wywołania, najpierw ponawia request z jej użyciem. Najtańsza ścieżka.
- Proxy Finder. Request przez rotowane proxy. Dobre rozwiązanie dla stron chronionych głównie na podstawie reputacji IP.
- Browser. Pełne renderowanie wykonujące JavaScript, rozwiązujące zabezpieczenia anti-bot i zbierające cookie wystawione przez stronę.
Gdy dany poziom zadziała, Auto zapisuje znalezioną sesję: użyte proxy id, cookie wystawione przez stronę oraz User-Agent. Przy kolejnym wywołaniu do tego samego hosta Auto najpierw próbuje tej sesji. Jeśli nadal działa, płacisz za tani poziom, a nie za drogi.
Minimalne wywołanie:
curl -X POST "https://api.foura.ai/api/auto" \
-H "X-API-Key: pk_live_..." \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/data",
"validate": { "status": { "accept": [200] } }
}'
Przycięta response:
{
"status": 200,
"data": "...",
"headers": [...],
"meta": {
"rung": "cache",
"solved": false,
"attempts": 1,
"credits": 2
},
"session": {
"proxy": "CLN1B8",
"cookies": [{ "name": "cf_clearance", "value": "..." }],
"userAgent": "..."
}
}
Dwa pola maja znaczenie dla tego, co budujesz dalej. meta.rung mowi, ktora sciezka wygrala. session to trojka, ktora mozesz przekazac do wywolania /api/single, aby samodzielnie powtorzyc ten sam punkt wyjsciowy. Pole proxy to nieprzezroczysty identyfikator base36 (brak surowych adresow IP), bezpieczny do logowania i przekazywania miedzy systemami.
Wplyw
Licza sie tutaj dwie liczby.
Pierwsze wywolanie chronionej witryny uruchamia poziom Browser: renderowanie, rozwiazywanie, zbieranie plikow cookie i zwrocenie strony. To okolo 10 kredytow. Gdy Auto zapisze w pamieci podrecznej dzialajaca sesje dla tego hosta, kolejne wywolania ja odtwarzaja: przez Single za 2 kredyty lub przez Proxy Finder za 4 kredyty, gdy pliki cookie sesji dzialaja z dowolnego adresu. Dzieki temu drugie wywolanie jest do 5 razy tansze niz pierwsze, a kazde nastepne korzysta z taniej stawki tak dlugo, jak dlugo sesja pozostaje wazna. Zmierzylismy to na srodowisku produkcyjnym podczas wdrazania: punkty wyjsciowe bez cookies (po znalezieniu) odtwarzaja sie dokladnie za 2 kredyty na wywolanie, w porownaniu z 10 kredytami, ktore kosztowaly wczesniej, gdy kazdy request przechodzil przez Proxy Finder.
Druga liczba: nieudane poziomy nie sa rozliczane. Jesli Auto przetestuje trzy proxy i kazde zwroci blad 403, zanim czwarte dostarczy dane, naliczane sa tylko kredyty za czwarte. Placisz za dostarczona tresc, a nie za wyszukiwanie.
To jest glowna wartosc. Kosztowny poziom uruchamia sie raz, tani dziala caly czas pozniej, a Ty nie musisz pisac wlasnej logiki buforowania.
Warto zwrocic uwage na dwa inne zachowania, poniewaz rozwiazuja one realne problemy produkcyjne:
Cele z blokada geograficzna przestaja marnowac punkty wyjsciowe. Gdy witryna zwraca 451 (lub komunikat o blokadzie prawnej) dla wiekszosci punktow wyjsciowych, Auto uczy sie, ktore kraje faktycznie dostarczyly tresc. Przy nastepnym wywolaniu najpierw pobiera swieze punkty wyjsciowe z tych krajow i rozklada na nie rownolegle obciazenie. Dzieki temu pojedynczy dzialajacy punkt wyjsciowy nie zostaje przeciazony ani objety limitem zadan.
Validate dziala na kazdym poziomie. Strona z nieprawidlowa trescia (blokada geograficzna zwracajaca status 200 z informacja prawna w tresci) nigdy nie jest uznawana za udana. Jesli Twoj validate.data.fail wskazuje "legal reasons", Auto probuje dalej, dopoki dany poziom go nie przejdzie. Nie poziom z pamieci podrecznej. Zaden poziom. Jesli zaden nie przejdzie walidacji, otrzymujesz jednoznaczny blad z prawdziwa przyczyna.
Dla zaawansowanych
Kilka opcji konfiguracyjnych waznych przy duzym wolumenie ruchu przez Auto.
timeout_ms to budzet czasowy dla calej operacji, a nie dla pojedynczego poziomu. Wartosc domyslna to 120 sekund. Auto dzieli ten czas: kazde podwywolanie otrzymuje min(wlasny naturalny timeout, pozostaly budzet), a sekwencja przestaje uruchamiac nowe poziomy, gdy zostalo zbyt malo czasu. Ustaw 20 000 dla zadan wymagajacych niskich opoznien interaktywnych. Pozostaw wartosc domyslna dla masowego pobierania danych, ktore toleruje dluzszy czas odpowiedzi.
forceProxy jest domyslnie wlaczone. Auto nigdy nie laczy sie z celem z adresu IP FourA, chyba ze ustawisz forceProxy: false. Jedna uwaga: niektore witryny (interaktywny Cloudflare z weryfikacja reputacji IP) dzialaja lepiej z czystego adresu IP centrum danych niz z malo zaufanego domowego punktu wyjsciowego. Dlatego forceProxy: false moze ulatwic, a nie utrudnic dostep do niektorych celow. Jesli widzisz powtarzajace sie wyzwania na okreslonym hoscie, warto sprobowac wylaczyc te opcje.
ignoreProxies to lista wykluczeń po stronie klienta. Przekaż identyfikatory proxy, o których wiesz, że są spalone (z wcześniejszego session.proxy, które otrzymało rate limit po Twojej stronie), a Auto pominie je wszędzie: przy ponownym użyciu aktywnych sesji, wyszukiwaniu węzłów wyjściowych oraz w podwywołaniu do Proxy Finder. Dzięki temu Auto nie wybierze ponownie węzła wyjściowego, który właśnie został oznaczony do pominięcia.
meta pozwala również budować własne dashboardy: które hosty trafiły dzisiaj do warstwy przeglądarkowej, średnia liczba prób na dostarczenie, stosunek żądań z rozwiązanym challenge do żądań czystych. Jeśli dany host nagle rośnie z 2 kredytów do 10, jest to sygnał degradacji sesji, na który możesz zareagować, zanim rachunek wzrośnie.
Przykład łączący wszystkie cztery elementy:
import requests
r = requests.post(
"https://api.foura.ai/api/auto",
headers={"X-API-Key": "pk_live_..."},
json={
"url": "https://example.com/product/9876",
"timeout_ms": 30000,
"forceProxy": True,
"ignoreProxies": ["CLN1B8", "K7X9AB"],
"validate": {
"status": {"accept": [200]},
"data": {"accept": ['"price":'], "fail": ["captcha", "legal reasons"]}
}
}
).json()
# If Auto delivered, keep the session for the next call to this host
if r.get("status") == 200 and "session" in r:
session = r["session"] # {proxy, cookies, userAgent}
print(r["meta"]["rung"], r["meta"]["credits"], r["meta"]["attempts"])
Szczegóły samego schematu validate znajdziesz we wcześniejszym omówieniu w Validate Rules Now Decide What Counts as Success.
Co dalej
Na roadmapie Auto znajdują się obecnie dwie rzeczy.
Wkrótce w Dashboardzie pojawi się inspekcja sesji. Obecnie sesje utrzymywane przez Auto dla każdego hosta znajdują się wewnątrz usługi i brakuje wglądu podczas debugowania nieoczekiwanego zużycia po Twojej stronie. Wdrażamy widok sesji per host, aby umożliwić podgląd sesji w cache, ich wieku, pozostałego czasu życia oraz historii szczebli dla każdej z nich. Dojdzie też przycisk do ręcznego usuwania sesji, gdy cel się zmieni i wiesz, że cache jest nieaktualny.
Następnie wprowadzimy ściślejszą kontrolę kosztów. Sztywny limit kredytów per request (nigdy nie wydawaj więcej niż X na to wywołanie, zwróć błąd, jeśli koszt miałby być wyższy) oraz tryb "single-only" dla zespołów, których cele nigdy nie wymagają szczebla przeglądarkowego. Oba rozwiązania działają dziś za flagami.
Sens Auto polega na tym, że nie musisz zastanawiać się, którego produktu użyć. Nie oznacza to jednak braku wglądu w to, co się stało. Każdy response zawiera informację o użytym szczeblu oraz utworzonej sesji. Sprawdź te dwa pola, a dowiesz się dokładnie, z czego wynika koszt Twoich wywołań.