Leite einen API-Client aus einer aufgezeichneten Sitzung ab
Einen Browser zu steuern ist das richtige Werkzeug für den ersten Besuch und das falsche für den hundertsten. Diese Fähigkeit zeichnet den Netzwerkverkehr einer Seite einmal auf, während du sie nutzt, und wandelt die erfassten Anfragen dann in einen eigenständigen Client (Skript, CLI oder Bibliothek) um, der direkt mit der internen API der Seite kommuniziert.
Die Aufzeichnung allein enthält bereits alles Notwendige: agent-browser bettet standardmäßig Textantwortkörper (JSON/HTML/JS) in die HAR-Datei ein, sodass die Endpunktstrukturen auch nach dem Schließen des Browsers offline untersucht werden können.
Ablauf
1. Aufzeichnen HAR-Aufzeichnung starten, die gewünschten Abläufe im Client durchführen
2. Identifizieren Die echten API-Endpunkte aus dem Rauschen herausfiltern
3. Extrahieren Anfrageformen, Antwortschemata und Authentifizierungsmaterial extrahieren
4. Generieren Den Client schreiben, eine Funktion pro Ablauf
5. Verifizieren Jeden Endpunkt wirklich aufrufen, bevor die Fertigstellung erklärt wird
1. Aufzeichnen
agent-browser network har start # bettet standardmäßig Textantwortkörper ein
# ... die Seite bedienen: suchen, Detailseite öffnen, paginieren usw. ...
agent-browser network har stop /tmp/site.har
- Führe jeden Ablauf aus, den der Client unterstützen soll, und führe jeden mindestens zweimal mit unterschiedlichen Eingaben durch (z. B. zwei Suchbegriffe, zwei Detailseiten). Der Vergleich der aufgezeichneten URLs zeigt, welche Teile Parameter sind.
- Wenn die Seite eine Anmeldung erfordert, melde dich vor dem Start der HAR-Aufzeichnung an, damit Anmeldeinformationen nicht unnötig in der Aufzeichnung landen. Die Sitzungscookies werden in Schritt 3 separat exportiert.
--content allbettet auch Binärkörper ein (base64);--content nonedeaktiviert die Einbettung. Die Obergrenze pro Körper beträgt 2 MB.
Solange die Sitzung noch geöffnet ist, liefern agent-browser network requests und network request <id> interaktiv dieselben Daten – aber nur die HAR-Datei überlebt Navigation und das Schließen des Browsers. Daher ist sie für alles, was mehrere Seiten umfasst, vorzuziehen.
2. Endpunkte identifizieren
Durchsuche die HAR-Datei mit jq:
# Alle JSON-API-Aufrufe: Methode, URL, Status
jq -r '.log.entries[]
| select(.response.content.mimeType | test("json"))
| "\(.request.method) \(.response.status) \(.request.url)"' /tmp/site.har
Ignoriere Analyse- und Infrastruktur-Rauschen: Telemetrie-Endpunkte (/collect, /track, /beacon, /log), Drittanbieter-Domains (google-analytics, segment, sentry, datadog, intercom, hotjar) und statische Assets. Die echte API ist meist First-Party, JSON-basiert und korreliert mit den von dir durchgeführten Aktionen.
3. Formate und Authentifizierung extrahieren
# Volle Details für einen Endpunkt: Anfrage-Header, POST-Körper, Antwortkörper
jq '.log.entries[] | select(.request.url | test("api/search"))
| {request: {method: .request.method, headers: .request.headers,
postData: .request.postData.text},
response: .response.content.text}' /tmp/site.har
- Antwortschema: Lese
.response.content.text– dies ist die tatsächliche Nutzlast, verwende sie, um Typen abzuleiten. - Authentifizierung: Vergleiche die Anfrage-Header über Endpunkte hinweg. Suche nach
authorization,cookie,x-csrf-token,x-api-keyund seiten-spezifischenx-*-Headern. Gib nur die relevanten weiter – teste durch Weglassen in Schritt 5. - Cookies: Exportiere die Live-Sitzung mit
agent-browser cookies get --json > cookies.json, damit der Client sie zur Laufzeit laden kann. Hartcodiere Cookie-Werte niemals in generierten Quellcode.
4. Den Client generieren
- Eine Funktion pro aufgezeichnetem Ablauf (
search(query),getItem(id)), typisiert anhand der beobachteten Antwortkörper. - Authentifizierungsmaterial (Cookies, Bearer-Tokens) wird aus einer Datei oder Umgebungsvariable geladen, mit einer klaren Fehlermeldung, die den Benutzer auffordert, die Browser-Anmeldung erneut durchzuführen, wenn es abläuft.
- Gib die Header wieder, die die API tatsächlich benötigt – einige Websites geben 403 ohne passenden
user-agent,refereroderx-requested-with. - Behalte Paginierungs-, Sortier- und Filterparameter, die in den aufgezeichneten Query-Strings aufgetaucht sind, als Funktionsoptionen bei.
5. Verifizieren
Rufe jede generierte Funktion gegen die Live-API auf und vergleiche die Antwortstruktur mit der Aufzeichnung. Häufige Fehler:
| Symptom | Ursache | Behebung |
|---|---|---|
| 401/403 | Abgelaufene oder fehlende Sitzung | Erneute Anmeldung über agent-browser, erneuter Export der Cookies |
| 403/419 bei Schreibzugriffen | CSRF-Token ist sitzungs- oder formularspezifisch | Zuerst den Token-Endpunkt abrufen oder diesen Ablauf browser-gesteuert lassen |
| Funktioniert, dann bricht es | Signierte/ablaufende Anfrageparameter | Für diesen Schritt auf den Browser zurückfallen; den Rest ableiten |
| Andere Struktur als HAR | A/B-Tests oder geospezifische Antworten | Neu aufzeichnen und die Vereinigung als optionale Felder behandeln |
Einschränkungen
- Interne APIs sind unversioniert und ändern sich ohne Vorankündigung – behalte die HAR-Datei, damit der Client neu abgeleitet werden kann.
- Beachte die Nutzungsbedingungen der Website und Rate-Limits; füge Verzögerungen für Massenabrufe ein.
- HAR-Dateien enthalten Live-Sitzungsanmeldeinformationen (Cookies, Tokens, POST-Körper). Behandle sie wie Geheimnisse: halte sie aus der Versionskontrolle heraus und lösche sie, wenn du fertig bist.