HTTP-Anfrage prüfen: curl, Rohnachricht und HAR-Datei

HTTP-Anfrage prüfen: curl, Rohnachricht und HAR-Datei

cURL-Kopien formatieren, rohe HTTP-Anfragen und -Antworten parsen und HAR-Exporte lesen, direkt im Browser: nichts wird gesendet oder wiederholt.

07.10.2026
15 Min. Lektüre
Teilen Sie diesen Artikel:
HTTPcURLHARDebuggenAnleitung

Eine Anfrage, drei Arten, sie zu lesen: cURL-Befehl, Rohnachricht, HAR-Datei

Wenn eine API-Integration sich merkwürdig verhält, ist der Beweis fast immer ein HTTP-Austausch, den Sie aus den DevTools kopieren können. Das Problem ist die Form, in der er ankommt: Das Copy as cURL von Chrome ist eine einzige endlos lange Zeile, eine eingefügte Antwort ist ein Header-Block mit darunterliegendem Body, und ein HAR-Export ist eine JSON-Datei mit Hunderten von Einträgen. Der cURL-Formatter macht aus einem Copy as cURL oder Copy as fetch lesbares mehrzeiliges cURL, wahlweise auch HTTP/1.1, eine .http-Datei, JavaScript fetch, Python requests, Go oder PHP. Der HTTP-Message-Parser liest eine rohe Anfrage, eine Antwort oder einen Header-Block, behält doppelte Header und formatiert einen JSON-Body. Der HAR-Inspector öffnet eine ganze aufgezeichnete Sitzung, grenzt sie auf den fehlgeschlagenen Aufruf ein und kopiert genau diesen Aufruf als cURL zurück. Alle drei arbeiten mit eingefügtem Text in Ihrem Browser: FastMinify sendet die Anfrage nie, ruft die eingefügte URL nie ab und hat weder Runner noch Proxy, ein Token in der Einfügung bleibt also in Ihrem Tab. Dieser Leitfaden zeigt, welches Werkzeug welche Frage beantwortet, wie Sie eine Anfrage debuggen, die im Browser funktioniert und im Skript nicht, welche Fehler Zugangsdaten preisgeben oder in die Irre führen, wie eine HTTP-Nachricht aufgebaut ist und wie Sie dieselben Prüfungen im Terminal und in Node durchführen. Die Werkzeuge liegen im HTTP-Werkzeug-Hub.

cURL-Formatter: liest Chromes Copy as cURL und Copy as fetch (als Text geparst, nie ausgeführt), eine .http-Datei mit einer Anfrage oder eine rohe HTTP/1.1-Anfrage. Ausgabe als cURL mehrzeilig oder einzeilig, HTTP/1.1, .http, JavaScript fetch, Python requests, Go net/http oder PHP curl
Die Option Geheimnisse entfernen (im Formatter standardmäßig aus) lässt die Header Cookie, Authorization, Referer und sec-ch-* sowie die Werte von -u und -b aus der Kopie weg
HTTP-Message-Parser: unterscheidet Anfrage, Antwort und reinen Header-Block, akzeptiert LF- und CRLF-Zeilenenden, behält doppelte Header und kann einen JSON-Body formatieren. Er bereinigt außerdem eingefügte Ausgaben von <code>curl -v</code> (die Zeilen mit > und <)
HAR-Inspector: öffnet eine .har- oder .json-Datei bis 50 MB (Warnung ab 20 MB), filtert Einträge nach Typ, Methode, Status und URL und kopiert einen Aufruf als cURL oder HTTP/1.1. Seine Option Geheimnisse entfernen ist standardmäßig an
Nirgends eine Senden-Schaltfläche: Die Anfrage wird nie ausgeführt, es gibt also keinen CORS-Fehler und keine Nebenwirkung auf Ihre API
Alles läuft im Tab: Kein eingefügter Befehl, Header oder HAR wird hochgeladen

Welches Werkzeug welche Frage beantwortet

Passende Einsätze

Die drei Werkzeuge lesen, übersetzen und teilen einen HTTP-Austausch. Sie führen ihn nicht aus.

Ein Copy as cURL aus den DevTools lesbar machen, bevor es in ein Ticket, eine README oder ein Code-Review wandert: ein Header pro Zeile statt eines Textblocks
Dieselbe Anfrage als fetch, Python requests, Go oder PHP ausgeben, um einen Aufruf in der Sprache Ihres Projekts nachzustellen
Eine von Kollegen eingefügte Antwort prüfen: Statuszeile, doppelte Header (mehrere Set-Cookie-Zeilen, Vary) und JSON-Body im <a href="/de/http-message-parser" class="text-primary hover:underline">HTTP-Message-Parser</a>
Die Ausgabe von <code>curl -v</code> einfügen und die Anfrage oder die Antwort ohne die <code>*</code>-Logzeilen zurückbekommen
Den fehlgeschlagenen Aufruf unter Hunderten in einem HAR mit dem Fehler-Filter finden und als cURL kopieren, um ihn im Terminal zu wiederholen
Was woanders hingehört

Jedes Werkzeug endet dort, wo ein anderes beginnt. Geben Sie an die Nachbarwerkzeuge oder an Ihren eigenen Code ab.

Eine Anfrage wiederholen: Es gibt keinen Runner. Fügen Sie das cURL in ein Terminal, in Postman oder in Ihre Testsuite ein
Eine URL in Protokoll, Host, Pfad und Query-Zeilen zerlegen oder Tracking-Parameter entfernen: der <a href="/de/url-parser" class="text-primary hover:underline">URL-Parser</a>
Einen <code>Cookie</code>- oder <code>Set-Cookie</code>-Header bearbeiten und SameSite oder das Präfix <code>__Host-</code> prüfen: der <a href="/de/cookie-header-editor" class="text-primary hover:underline">Cookie-Editor</a>
Die Claims eines Bearer-Tokens aus einem Authorization-Header lesen: der <a href="/de/jwt-decode" class="text-primary hover:underline">JWT-Decoder</a>, und der <a href="/de/blog/jwt-online-erstellen-dekodieren" class="text-primary hover:underline">JWT-Leitfaden</a> dazu, was ein dekodiertes Token beweist und was nicht
Den API-Vertrag selbst statt eines einzelnen Aufrufs validieren: der <a href="/de/validate-openapi" class="text-primary hover:underline">OpenAPI-Validator</a> und der <a href="/de/blog/openapi-swagger-online-validieren" class="text-primary hover:underline">Leitfaden zur OpenAPI-Validierung</a>

Einen API-Aufruf anhand einer kopierten Anfrage debuggen

Im Browser geht es, im Skript nicht

Fügen Sie das Copy as cURL in den cURL-Formatter ein und lesen Sie es Zeile für Zeile: Es enthält alles, was der Browser hinzugefügt hat, nicht nur das, was Ihr Code braucht.

Vom Browser ergänzte Header wie <code>sec-ch-ua</code>, <code>accept-language</code>, <code>origin</code>, <code>referer</code> und die komplette <code>cookie</code>-Zeile sind selten nötig. Entfernen Sie sie einzeln, bis der Aufruf scheitert: Der zuletzt entfernte war der entscheidende
Ein per Cookie authentifizierter Aufruf scheitert im Skript, weil das Cookie fehlt, nicht weil der Code falsch ist: Die Sitzung steckt im <code>Cookie</code>, ein API-Client sendet dagegen meist einen <code>Authorization</code>-Header
Die Methode wird abgeleitet, wenn Sie sie nicht nennen: Ein Body ohne <code>-X</code> ergibt POST, kein Body ergibt GET. Ein GET mit Body weist darauf hin, dass beim Kopieren etwas verloren ging
Ein <code>Content-Type</code>, der nicht zum Body passt (JSON als <code>application/x-www-form-urlencoded</code> gesendet oder umgekehrt), ist die klassische Ursache für 400 oder 415
Ein abschließendes <code>--compressed</code> bedeutet, dass der Browser <code>Accept-Encoding</code> gesendet und die Antwort für Sie entpackt hat. Ihr Client muss dasselbe tun, sonst sieht der Body wie Datenmüll aus
Eine Antwort lesen: Status, Header, Body

Fügen Sie die Antwort in den HTTP-Message-Parser ein. Statuszeile, Header-Tabelle und Body erscheinen getrennt.

Die Statusklasse sagt, wen Sie zuerst verdächtigen: 4xx die Anfrage, 5xx den Server, 3xx eine Weiterleitung, der Sie folgen müssen (RFC 9110). Prüfen Sie bei 3xx den Header <code>Location</code>
<code>WWW-Authenticate</code> bei einem 401 nennt das vom Server erwartete Schema, und <code>Retry-After</code> bei 429 oder 503 sagt, wie lange Sie warten sollen
Doppelte Header bleiben als eigene Zeilen erhalten. Zwei <code>Set-Cookie</code>-Zeilen sind zwei Cookies und kein Fehler, und ein wiederholtes <code>Vary</code> ist zulässig
Der Content-Type entscheidet, wie der Body zu lesen ist: Eine JSON-Fehlermeldung mit <code>text/html</code> stammt meist von einem Proxy oder Gateway, nicht von Ihrer API
Chunked-Bodys werden nicht zusammengesetzt. Beginnt der Body mit einer hexadezimalen Größe in einer eigenen Zeile, haben Sie den rohen Chunked-Transfer eingefügt: Kopieren Sie stattdessen den dekodierten Body aus den DevTools
Den fehlgeschlagenen Aufruf in einem HAR finden

Öffnen Sie den Export im HAR-Inspector und grenzen Sie die Liste ein, bevor Sie ein Detail lesen.

Die Zähler Requests, Größe, Ladezeit und Fehler stehen über der Liste. Fehler zählt die Einträge mit Status 400 oder höher
Eine Anfrage ohne jede Antwort wird mit Status 0 aufgezeichnet (von einer Erweiterung blockiert, DNS-Fehler, gescheiterter CORS-Preflight). Sie zählt nicht als Fehler: Gehen Sie auch die ungefilterte Liste durch
Der XHR-Filter fasst fetch- und XMLHttpRequest-Aufrufe zusammen. Ein Textfilter auf <code>/api/</code> blendet Schriften, Bilder und Tracking-Skripte aus
Wählen Sie eine Zeile, um Request-Header, Response-Header, Payload und eine Vorschau des Antwort-Bodys zu lesen, und nutzen Sie cURL kopieren, um sie zu wiederholen
Ein HAR aus Chrome 130 oder neuer ist standardmäßig bereinigt und lässt Cookie, Set-Cookie und Authorization weg. Ein fehlender Authorization-Header in der Datei beweist nicht, dass der Browser ihn nicht gesendet hat

Vier Fehler, die Zugangsdaten preisgeben oder Sie in die Irre führen

Eine kopierte Anfrage samt Zugangsdaten weitergeben

Ein Copy as cURL aus einer authentifizierten Sitzung enthält Ihre Header Cookie und Authorization, und jeder, der das Ticket liest, kann den Aufruf als Sie wiederholen. Der Schalter Geheimnisse entfernen lässt Cookie, Authorization, Referer, sec-ch-* sowie die Werte von -u und -b aus der Kopie weg. Im Formatter und beim Als-cURL-Kopieren des Parsers ist er standardmäßig aus, im HAR-Inspector an. Er wirkt nur auf Header: Ein Token im Query-String (?access_token=), im Request-Body, in einem eigenen Header wie X-Api-Key oder in einem Antwort-Body bleibt genau dort, wo es war. Lesen Sie die Ausgabe, bevor Sie sie einfügen, und tauschen Sie alles aus, was Ihren Rechner schon verlassen hat. Der Secrets-Scanner hilft, einen übersehenen Schlüssel zu finden.

Ein Copy as cURL in einem öffentlichen Issue posten, weil der Authorization-Header „nur ein Test-Token“ ist
Annehmen, dass Geheimnisse entfernen auch Tokens aus URL oder Body streicht
Ein HAR an einen Dienstleister schicken, ohne die Antwort-Bodys zu prüfen, die personenbezogene Daten enthalten können
Einen langlebigen Schlüssel in einem cURL belassen, das in einem Wiki oder in der Shell-History liegt
Geheimnisse entfernen, dann das Ergebnis noch einmal lesen: Query-Strings, Bodys und eigene Header müssen Sie selbst bereinigen. Alle weitergegebenen Zugangsdaten tauschen Sie aus.
Die HAR-Zähler als Seitenperformance lesen

Die Ladezeit des HAR-Inspectors ist die Dauer des längsten einzelnen Eintrags, nicht die Ladezeit der Seite, und Größe addiert die in jedem Eintrag erfassten Body-Größen. Sie beantworten „welcher Aufruf war am langsamsten“ und „wie viele Daten flossen“, nicht das, was Lighthouse misst. Requests laufen parallel, die Summe der Zeiten ist deshalb auch nicht die Seitenzeit. Gecachte Antworten und komprimierte Bodys lassen die Größenangaben von denen in der Fußzeile des Network-Panels abweichen.

Die Ladezeit des Inspectors als Ladezeit der Seite zitieren
Die HAR-Gesamtgröße mit der Lighthouse-Transfergröße vergleichen und eine von beiden für falsch erklären
Requests mit Status 0 ignorieren, weil der Fehler-Zähler 0 zeigt
Ein Performanceproblem anhand eines einzigen HAR beurteilen, das mit deaktiviertem Cache und aktiver Erweiterung aufgezeichnet wurde
Sie optimieren den falschen Endpunkt oder melden eine Fehlerrate von null, obwohl eine Anfrage still blockiert wird.
Eine originalgetreue Wiedergabe des Eingefügten erwarten

Der Formatter versteht die von den DevTools erzeugte Teilmenge von cURL und ignoriert den Rest stillschweigend. Optionen wie -L, -s, -k, --insecure, -v und -o fallen aus der Ausgabe heraus: Ein Befehl, der sich auf -L zum Folgen einer Weiterleitung oder auf -k zum Überspringen der Zertifikatsprüfung verließ, verliert dieses Verhalten bei der Übersetzung. Manche Eingaben werden mit klarer Meldung abgelehnt: Multipart-Uploads (-F), -T-Datei-Uploads, @Datei-Bodys, {{Variablen}} von REST Client, .http-Dateien mit mehreren Anfragen, axios-Snippets sowie fetch-Aufrufe mit Template-Literalen oder ungebundenen Variablen. Eine eingefügte Antwort ist keine Anfrage, daraus lässt sich kein cURL machen.

Ein cURL mit -L übersetzen und vom erzeugten fetch dasselbe Verhalten erwarten
Einen Multipart-Upload einfügen und sich wundern, dass der Formatter ihn ablehnt
Aus einer Einfügung, die nur eine Antwort enthält, ein cURL kopieren wollen
Das erzeugte Snippet als Produktionscode statt als Ausgangspunkt behandeln
Lesen Sie den erzeugten Code einmal durch, ergänzen Sie Timeouts, Wiederholungen und Fehlerbehandlung selbst und halten Sie Secrets in Umgebungsvariablen.
Den Body unbemerkt verändern

Mehrere Ausgaben rücken einen JSON-Body neu ein: das mehrzeilige cURL, die Ausgaben HTTP/1.1 und .http, JavaScript fetch und Python requests, das ihn in ein json=-Literal umwandelt. Das einzeilige cURL behält den Body so, wie Sie ihn eingefügt haben. Für die meisten APIs ist das harmlos, fatal aber, wenn der Server eine Signatur über genau diese Bytes prüft, wie es Webhook-Endpunkte oft tun: Ein einziges zusätzliches Leerzeichen, und der HMAC passt nicht mehr. Der Leitfaden zu Hash und HMAC erklärt, wie solche Signaturen entstehen.

Einen signierten Webhook-Body wiederholen, nachdem er durch einen Pretty-Printer lief
Ein erzeugtes Snippet byteweise mit dem Original vergleichen
Die mehrzeilige Ausgabe als Fixture für einen Signaturtest verwenden
Die mehrzeilige Ausgabe in einen Test einfügen, der den Body als String vergleicht
Behalten Sie bei einem signierten Body den Originaltext, nutzen Sie das einzeilige cURL und berechnen Sie die Signatur über genau den String, den Sie senden.

Aufbau einer HTTP-Nachricht und was jedes Werkzeug ansieht

Startzeile, Header, Leerzeile, Body

Eine HTTP/1.1-Nachricht ist Klartext (RFC 9112), ihre Bedeutung legt RFC 9110 fest. Anfrage und Antwort teilen sich das Layout.

Anfragezeile: <code>POST /orders HTTP/1.1</code> trägt Methode, Ziel und Protokollversion. Eine Anfrage muss einen <code>Host</code>-Header haben
Statuszeile: <code>HTTP/1.1 201 Created</code> trägt die Version, einen dreistelligen Statuscode und eine Begründung, die Clients ignorieren
Header: ein <code>Name: Wert</code> pro Zeile, Namen sind unabhängig von der Groß-/Kleinschreibung, und derselbe Name kann mehrfach vorkommen
Eine Leerzeile beendet die Header. Was folgt, ist der Body, der leer sein darf (ein GET, ein 204)
Umgebrochene Header-Zeilen (eine Fortsetzung, die mit einem Leerzeichen beginnt) fügt der Parser zu einem Wert zusammen
Dieselbe Anfrage in vier Formen

Die Werkzeuge wandeln zwischen diesen Formen um, deshalb kann eine kopierte Anfrage jede davon werden.

Copy as cURL: <code>curl URL -H "Name: Wert" --data-raw BODY --compressed</code>, die Methode kommt per <code>-X</code> dazu, wenn sie nicht GET ist
Copy as fetch: <code>fetch(url, { method, headers, body })</code>, ein JavaScript-Literal, das der Formatter als Text liest und nie auswertet
Rohes HTTP/1.1: Anfragezeile, ein Host-Header und die übrigen Header, dann der Body. Das <code>.http</code>-Format der REST-Client-Erweiterungen ist dasselbe mit der vollständigen URL in der ersten Zeile
HAR-Eintrag: ein JSON-Objekt mit <code>request</code> (method, url, headers, postData) und <code>response</code> (status, headers, content) sowie einer <code>time</code> in Millisekunden. HAR 1.2 ist in einem W3C-Entwurf beschrieben
Die Ausgaben für Python, Go und PHP sind derselbe Aufruf, geschrieben mit requests, net/http und der curl-Erweiterung
Statusklassen und die Header, die Sie zuerst lesen

Eine kurze Leseordnung erspart die meisten langen Debug-Sitzungen.

1xx Information, 2xx Erfolg, 3xx Weiterleitung, 4xx Client-Fehler, 5xx Server-Fehler (RFC 9110). Der Parser zeigt die Klasse einer Antwort als farbige Markierung
401 bedeutet „nicht authentifiziert“ und kommt mit <code>WWW-Authenticate</code>; 403 bedeutet authentifiziert, aber nicht berechtigt; 429 bedeutet Ratenlimit und trägt oft <code>Retry-After</code>
<code>Content-Type</code> und <code>Content-Length</code> (oder Chunked-Transfer) beschreiben den Body, <code>Accept</code> und <code>Accept-Encoding</code> das, was der Client lesen kann
<code>Cache-Control</code>, <code>ETag</code> und <code>Age</code> erklären, warum eine Antwort veraltet oder frisch ist, und <code>Set-Cookie</code> und <code>Location</code> ändern, was der Client als Nächstes tut
Dieselben Klassen dienen im HAR-Inspector als Status-Filter, mit einer Fehler-Abkürzung für 400 und höher

Die drei Werkzeuge, Schritt für Schritt

Ein Copy as cURL mit dem cURL-Formatter formatieren

Der cURL-Formatter formatiert beim Einfügen neu, ohne Senden-Schaltfläche. In Chrome klicken Sie im Network-Tab mit der rechten Maustaste auf die Anfrage, dann Copy, dann Copy as cURL (bash).

1

Befehl einfügen

Ein Copy as cURL, ein Copy as fetch, eine .http-Datei mit einer Anfrage oder eine rohe HTTP/1.1-Anfrage werden erkannt. Zeilenfortsetzungen werden für Sie zusammengefügt.

2

Sprache und Layout wählen

cURL, HTTP/1.1, .http, JavaScript fetch, Python requests, Go net/http oder PHP curl, im mehrzeiligen oder einzeiligen Layout.

3

Geheimnisse entfernen vor dem Teilen aktivieren

Es lässt Cookie, Authorization, Referer, sec-ch-* und die Werte von -u und -b aus der Kopie weg. Query-Strings und Bodys bleiben unberührt.

4

Ergebnis kopieren oder herunterladen

Jede Sprache hat ihren eigenen Dateinamen (formatted-curl.sh, formatted-request.http, formatted-requests.py und so weiter). Ein Parse-Fehler nennt, was abgelehnt wurde und warum.

Eine rohe Anfrage oder Antwort mit dem HTTP-Message-Parser lesen

Der HTTP-Message-Parser stellt eine eingefügte Nachricht als Startzeile, Header-Tabelle und Body dar.

1

Nachricht einfügen

Eine Anfrage, eine Antwort, ein reiner Header-Block oder die Ausgabe von curl -v. LF- und CRLF-Zeilenenden funktionieren beide.

2

Erkannte Art prüfen

Das Werkzeug beschriftet sie als HTTP-Request, HTTP-Response oder Nur Header und zeigt die Anzahl der Header. Doppelte bleiben als eigene Zeilen stehen.

3

Body lesen

Ein JSON-Body wird standardmäßig formatiert, mit einem Schalter für die Rohansicht. Chunked-Bodys werden nicht zusammengesetzt.

4

Eine Anfrage als cURL kopieren

Dazu braucht es eine Anfrage mit absoluter URL oder einem Host-Header. Mit nur einem Host-Header wird das Schema geraten: http für localhost, 127.0.0.1 oder Port 80, sonst https. Der Schalter Kopie bereinigen ist standardmäßig aus.

Eine Sitzung mit dem HAR-Inspector erkunden

Der HAR-Inspector liest die Datei in Ihrem Tab und ruft die aufgeführten URLs nie ab.

1

HAR exportieren

Nutzen Sie im Network-Panel das Download-Symbol (Export HAR). Exporte aus Chrome, Firefox, Edge, Charles und HTTP Toolkit öffnen sich bis 50 MB; ab 20 MB kann das Filtern träge werden.

2

Datei ablegen oder JSON einfügen

Eine .har- oder .json-Datei oder das HAR-1.2-JSON selbst. Die Beispiel-Schaltfläche lädt einen kleinen Mitschnitt zum Ausprobieren der Filter.

3

Liste eingrenzen

Typ-Filter (XHR, JS, CSS, Img, Media, Font, Doc, Andere, Fehler), eine Methode, eine Statusklasse und die Suche „URL enthält“. Der Typ stammt aus dem Eintrag, wenn Chrome ihn aufzeichnet, sonst aus dem MIME-Typ der Antwort.

4

Aufruf öffnen und extrahieren

Lesen Sie Request- und Response-Header, Payload und Body-Vorschau. cURL kopieren, HTTP/1.1 kopieren oder URL kopieren, oder die Datei herunterladen; mit aktivem Geheimnisse entfernen heißt sie sanitized.har, ohne die Header Cookie, Set-Cookie, Authorization, Referer und sec-ch-* und ohne die Cookie-Arrays.

Was die Werkzeuge nicht tun

Ein paar Grenzen, die Sie kennen sollten, bevor Sie sich darauf verlassen.

Es wird nie eine Anfrage gesendet oder wiederholt: kein Runner, kein Proxy, keine Senden-Schaltfläche
Keine Multipart-Bodys (-F), keine Dateien (-T, @Datei), keine REST-Client-{{Variablen}}, keine axios-Snippets, keine .http-Dateien mit mehreren Anfragen
cURL-Optionen wie -L, -k, -s und -o werden in der Ausgabe ignoriert
Kein Zusammensetzen von Chunked-Bodys im Message-Parser
Der HAR-Inspector zeichnet kein Wasserfalldiagramm und berechnet keine Seitenzeiten
Geheimnisse entfernen wirkt auf Header und Cookie-Arrays, nicht auf URLs, Bodys oder eigene Header

Dieselben Prüfungen im Terminal und in Node

curl: nur die Header oder der ganze Austausch

Wenn Sie einen Befehl ausführen können, zeigt curl dieselben Daten, die der Parser aufbereitet. Halten Sie Tokens in Umgebungsvariablen, nicht in dem Befehl, den Sie in ein Ticket einfügen.

Einfaches Beispiel

# Response headers only: -D - writes them to stdout, -o /dev/null drops the body curl -sS -D - -o /dev/null https://api.example.com/orders/42 \ -H "Authorization: Bearer $API_TOKEN" # The full exchange: lines starting with > are sent, < received, * is curl's own log curl -v https://api.example.com/orders/42 2>&1 | head -40
Node: ein HAR ohne Browser filtern

Ein HAR ist JSON, wenige Zeilen listen die fehlgeschlagenen Aufrufe. Anders als der Fehler-Zähler des Inspectors behält dieser Filter auch Status 0.

Einfaches Beispiel

import { readFileSync } from 'node:fs' const har = JSON.parse(readFileSync('session.har', 'utf8')) // Status 0 means no response at all (blocked, DNS failure, CORS): keep it in the list const failed = har.log.entries .filter((e) => e.response.status >= 400 || e.response.status === 0) .map((e) => ({ method: e.request.method, status: e.response.status, url: e.request.url, ms: Math.round(e.time), })) console.table(failed)
Node: einen kopierten fetch-Aufruf nachstellen

Nehmen Sie die Ausgabe von Copy as fetch, verlegen Sie das Secret in eine Umgebungsvariable und geben Sie aus, was zurückkommt. Die vom Formatter erzeugten Snippets sind ein Ausgangspunkt derselben Art.

Einfaches Beispiel

// The call you copied as fetch(), with the secret read from the environment const res = await fetch('https://api.example.com/orders', { method: 'POST', headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ' + process.env.API_TOKEN, }, body: JSON.stringify({ sku: 'A-1042', qty: 2 }), }) console.log(res.status, res.statusText) console.log(res.headers.get('content-type')) console.log(res.headers.getSetCookie()) // every Set-Cookie line, Node 20+ console.log(await res.text())
Die HTTP-Werkzeuge von FastMinify

Nichts zu installieren und nichts gesendet: Der cURL-Formatter, der HTTP-Message-Parser und der HAR-Inspector decken Lesen, Übersetzen und Teilen einer Anfrage ab. Die Kompromisse: keine Wiederholung, eine Teilmenge von cURL, kein Zeit-Wasserfall und eine Bereinigung, die nur Header kennt. Für einen echten Test führen Sie den Aufruf im Terminal, in Postman oder in Ihrer eigenen Testsuite aus; um eine Spezifikation statt eines Aufrufs zu prüfen, nutzen Sie den OpenAPI-Validator.

Fazit

Ein HTTP-Austausch ist nur Text, und Debugging heißt meist, ihn in der richtigen Form zu lesen. Der cURL-Formatter macht ein Copy as cURL lesbar und übertragbar, der HTTP-Message-Parser legt eine rohe Anfrage oder Antwort mit doppelten Headern und JSON-Body übersichtlich aus, und der HAR-Inspector grenzt eine aufgezeichnete Sitzung auf den fehlgeschlagenen Aufruf ein. Keiner von ihnen sendet etwas: Sie behalten die Kontrolle darüber, was Ihren Browser verlässt, und das zählt, denn diese Einfügungen enthalten Cookies und Tokens. Entfernen Sie Geheimnisse vor dem Teilen, denken Sie daran, dass das nur Header bereinigt, und lesen Sie die Zähler als das, was sie sind. Der HTTP-Werkzeug-Hub bündelt die Nachbarwerkzeuge für URLs und Cookies.

Lesen Sie ein Copy as cURL Zeile für Zeile und entfernen Sie die vom Browser ergänzten Header, bevor Sie einen Aufruf nachstellen
Entfernen Sie Geheimnisse vor dem Teilen und bereinigen Sie Query-String, Body und eigene Header von Hand
Zählen Sie in einem HAR Status 0 als Fehlschlag und lesen Sie die Ladezeit als langsamsten Aufruf, nicht als Seitenzeit
Behalten Sie den Original-Body, wenn eine Signatur ihn abdeckt: Neu eingerücktes JSON ändert die Bytes
Wiederholen Sie einen Aufruf im Terminal oder in einer Testsuite: Die Browser-Werkzeuge lesen und übersetzen, sie senden nie
Teilen Sie diesen Artikel
Teilen Sie diesen Artikel: