Alle Beiträge

FourA Digest, 7. bis 14. August 2026

Auto übernimmt die Session der Einstiegsseite und öffnet dann die gewünschte Unterseite. Der Browser löst Cloudflare-Checkboxes bei parallelen Requests.

Highlights

Viele Seiten geben ihre Startseite an jeden heraus und sperren alles einen Klick tiefer. Auto geht jetzt durch die Vordertür: Es nimmt die Session, die diese Einstiegsseite vergibt, und fragt dann mit ihr nach der gewünschten Seite. Browser hat diese Woche die schwerere Arbeit übernommen. Er löst die Checkbox-Challenge von Cloudflare, wenn mehrere Requests gleichzeitig auf dieselbe Seite treffen, und wenn eine Seite geschlossen bleibt, meldet er, was er gesehen hat, statt nur ein einziges Wort.

Was es Neues gibt

Auto öffnet Seiten, die sich hinter einer Session verbergen

Ein eBay-Listing lehnt einen kalten Request auf jeder unserer Routen ab. Dieselbe URL öffnet sich, wenn der Request den Cookie-Jar trägt, den eBays eigene Einstiegsseite an jeden Besucher verteilt. Kein Login, kein geliehener Account, nichts, was du nicht auch von Hand in einem Tab tun könntest.

Auto erledigt das jetzt für dich. Wenn ein Exit den Origin erreicht und die tiefe Seite weiterhin verweigert wird, ruft Auto das Stammverzeichnis der Seite über denselben Exit ab, behält alle zurückkommenden Cookies und fragt erneut. Die Response sagt dir, dass es passiert ist: Die gewinnende Stufe lautet warmup.

Aber die Kosten sind der interessante Teil. Diese Session kommt portabel zurück, sodass der Jar nicht an den Exit geschweißt ist, der ihn verdient hat. Folge-Reads werden über /api/proxy wiederholt und landen bei /api/single für 2 Credits. Es ist dieselbe Escalate-then-Replay-Kette, über die wir bei der Cloudflare-Freigabe geschrieben haben, wobei die eigenen Session-Cookies eines Anbieters anstelle von cf_clearance stehen.

Absichtlich begrenzt: Zwei Versuche pro Request, auf unterschiedlichen Exits, nur nachdem die tiefe URL bereits fehlgeschlagen ist, und nur, wenn der Exit den Origin überhaupt erst erreicht hat. Eine Seite, die uns einfach blockiert, zahlt also einmal zwei zusätzliche Sub-Calls, keine Schleife. Mehr darüber, wie die Leiter ihre Stufen auswählt, im Auto-Write-up.

Browser löst Checkbox-Challenges, wenn Requests sich überschneiden

Browser löst nun das Checkbox-Widget von Cloudflare bei gleichzeitigen Requests auf dieselbe Seite. Drei auf einmal auf einer Nachrichtenseite hinter Turnstile: 5.2s, 5.8s, 9.1s.

Zwei kleinere Änderungen kamen dazu. Ein Klick zählt erst, wenn das Widget tatsächlich weg ist, da Cloudflare seine Challenge öfter neu ausgibt, als du erwarten würdest (der erste Klick ist regelmäßig nicht das Ende der Konversation). Und eine Seite, die freigibt, meldet defenseSolved: true bei dem Call, der sie freigegeben hat, was derselbe Call ist, der für die Lösung berechnet wird.

Eine blockierte Seite sagt dir, was der Solver gesehen hat

"Timeout" weist dich auf Latenz hin. Meistens ist die Latenz nicht das Problem und die Antwort liegt einen Exit weiter.

Wenn Cloudflare einen Solve ablehnt, gibt es die Challenge neu aus und legt seinen eigenen Retry-Marker in den Jar. Browser liest diesen Marker. Anstatt die Zeit abzuwarten, antwortet er in etwa 17 Sekunden und nennt den Anbieter, die gemachten Klicks und ob die Freigabe erteilt wurde:

Timeout after 12s: the cloudflare challenge did not complete from this exit
(2 checkbox presses, clearance granted, challenge re-issued by the site)

Eine dieser Zeilen sagt dir, dass du den Request anders senden sollst. Die andere sagt dir nichts.

Errors aus der API-Schicht sind jetzt auch klarer. Ein Request, der die Wartezeit überschreitet, kommt als Timeout zurück. Ein Dienst, den wir nicht erreichen, kommt als unavailable zurück. Und beides wird nicht als Proxy-Problem beschrieben, wenn der Request gar keinen Proxy enthielt. timeout_ms in einem Browser-Call wird bis zu den vollen 120 Sekunden respektiert, die die API akzeptiert. Ein langsames Ziel erhält so das von dir festgelegte Budget und du liest das eigene Urteil der Engine statt das des Gateways. Parameter sind in der API-Referenz aufgeführt.

Rechnungsdetails und Korrektur einer Rechnung im Ausstellungsmonat

Bulgarische Rechnungen drucken einen Firmenvertreter (MOL) in das Empfängerfeld. Nichts im System hat dies erfasst, daher war diese Zeile immer leer. Die Rechnungsdetails enthalten das Feld jetzt.

Die Rechnungstabelle bietet auch die Option Update details für eine Rechnung, die sich noch im Ausstellungsmonat befindet und deren eingefrorene Details von deinem aktuellen Rechnungsprofil abweichen. Der Dialog benennt jedes Feld, das sich ändert, und den neuen Wert. Er sagt klar, dass die Nummer, die Daten und die Beträge gleich bleiben. Die Bestätigung ist deine Zustimmung, die auf unserer Seite aufgezeichnet wird. Eine Rechnung in diesem Zeitfenster ohne Änderungsbedarf zeigt "Editable until" und das Datum an. Das Zeitfenster ist also sichtbar und nichts, was du erst später herausfindest.

Unter der Haube

Jedes Skript, das das Dashboard ausführt, wird von unserem eigenen Origin ausgeliefert. Der Login führt dich nur auf einen Pfad dieser Seite zurück.

Rollouts des Rendering-Dienstes erfolgen Server für Server. Jeder Server muss eine echte Seite ausliefern, bevor der nächste angefasst wird.

Auf dem Statusportal liefert der Issues-Endpoint offene und gelöste Einträge über seine öffentliche API aus, passend zur Liste auf der Seite.

Eine Ablehnung, die sich selbst benennt, ist ein Call. Eine Wartezeit, die in "Timeout" endet, ist eine Vermutung darüber, was als nächstes zu versuchen ist, bezahlt zum gleichen Preis. Errors sind eine Produktoberfläche. Diese Woche haben wir begonnen, sie auch so zu behandeln.