cURL-Parser

Läuft in deinem Browser; nichts wird hochgeladen

Einen cURL-Befehl als den Request lesen, den er sendet, und in fetch, Python requests oder sauberes Bash umwandeln. Es wird nichts gesendet.

Command

No command yet

Paste a cURL command on the left, for example from your browser's developer tools (Network tab, right-click a request, Copy as cURL). Nothing is sent: the command is only read.
Ready
Ln 1, Col 1

Was ist ein cURL-Befehl?

cURL ist ein Kommandozeilenprogramm zum Senden von HTTP-Requests, und ein cURL-Befehl ist die häufigste Art, wie Entwickler einen Request teilen. Eine Zeile enthält alles, was der Server bekommt: die Methode nach -X, die URL, jeden Header nach -H und den Body nach -d.

cURL-Befehle begegnen dir bei der Arbeit mit APIs überall. API-Dokumentationen zeigen Beispiele als cURL, die Entwicklertools im Browser bieten bei jedem Netzwerk-Request Copy as cURL an, und Bug-Reports enthalten oft einen, damit sich das Problem exakt wiederholen lässt.

curl ergänzt Teile des Requests, die im Befehl nicht stehen, und genau die sorgen für Überraschungen. -d macht aus einem GET einen POST und schickt Content-Type: application/x-www-form-urlencoded, ein JSON-Body ohne JSON-Content-Type kommt beim Server also als Formular an. Mehrere -d-Optionen werden mit & verbunden. -G verschiebt die Daten stattdessen in den Query-String, und -u user:password wird zu einem Basic-Authorization-Header. Der Parser zeigt diese Header und markiert, welche Option sie hinzugefügt hat.

So benutzt du dieses Tool

  1. 1Füge einen Befehl in den Bereich Command ein oder wähle einen aus Examples. Aus Chrome oder Firefox kopierte Befehle funktionieren unverändert, auch Copy as cURL (cmd) unter Windows mit seinen ^-Escapes und PowerShell-Befehle mit Backtick-Zeilenfortsetzungen.
  2. 2Lies den Request im Tab Request: die Methode und warum curl sie verwendet, die URL in ihre Teile zerlegt, Query-Parameter, Header, den Body (JSON wird hübsch formatiert, ohne einen Wert zu ändern) und Optionen, die der Parser auflistet, aber nicht auswertet.
  3. 3Hinweise oben im Tab Request zeigen, was man wissen sollte, etwa einen JSON-Body, der als Formular gesendet wird. Show oder F8 setzt den Cursor auf die betreffende Option.
  4. 4Öffne den Tab Code, um denselben Request als JavaScript fetch, Python requests oder sauberen mehrzeiligen Bash-Befehl zu bekommen, und kopiere ihn.
  5. 5Tidy (Shift+Alt+F) schreibt den Befehl im Editor als Bash um, eine Option pro Zeile. Ctrl+Z macht das rückgängig.

Fehlerbehebung

Nicht geschlossenes einfaches oder doppeltes Anführungszeichen
Ein Anführungszeichen wird geöffnet und nie geschlossen, deshalb wird der Rest des Befehls als ein einziges Argument gelesen. In Bash darf ein einfaches Anführungszeichen nicht innerhalb von '…' stehen; schreib es als '\'' oder nutze $'…'. Der Editor markiert, wo das Anführungszeichen beginnt.
Keine URL gefunden
Jedes Argument wurde als Option oder Optionswert gelesen. Prüfe, ob die URL vorhanden ist und nicht in einem offenen Anführungszeichen steckt, und ob Optionen wie -o oder -u vor der URL ihren eigenen Wert haben.
Der Body sieht nach JSON aus, wird aber als Formular gesendet
-d ohne Content-Type lässt curl application/x-www-form-urlencoded senden. Füge -H "Content-Type: application/json" hinzu oder nutze --json, das Content-Type und Accept setzt.
Die URL enthält [ ] oder { }
curl behandelt sie als Muster und sendet mehrere Requests, einen pro Wert. Füge -g (--globoff) hinzu, um sie wie geschrieben zu senden.
Das ist ein wget-Befehl, kein curl
Der Parser liest nur curl. Ein im Browser als PowerShell kopierter Befehl nutzt Invoke-WebRequest; wähle stattdessen Copy as cURL.

Häufige Fragen

Wird mein Befehl irgendwohin geschickt?

Nein. Der Befehl wird in deinem Browser geparst, und es wird kein Request gesendet. Das ist wichtig, weil kopierte Befehle oft echte Tokens und Cookies enthalten. Der Befehl bleibt im Session Storage dieses Tabs, bis du ihn löschst oder den Tab schließt; Copy link legt ihn hinter das # im Link (wird nie an einen Server geschickt), also prüfe ihn vor dem Teilen auf Zugangsdaten.

Welche cURL-Optionen versteht der Parser?

Die, die den Request verändern: -X, -H, -d und seine Varianten (--data-raw, --data-binary, --data-urlencode), --json, -F, -G, -I, -T, -u, -b, -A, -e, --oauth2-bearer, -L, -k, -m und --compressed. Kurze Optionen lassen sich kombinieren wie in -sSL oder mit angehängtem Wert schreiben wie in -XPOST. Andere Optionen werden mit ihrer Wirkung aufgelistet, und unbekannte ebenfalls, statt sie zu verwerfen.

Warum steht da POST, obwohl mein Befehl kein -X hat?

curl sendet einen POST, sobald ein Befehl einen Body hat (-d, --json oder -F) und keine Methode angegeben ist, und der Parser folgt derselben Regel. -G sendet die Daten stattdessen als Query-String mit GET, und -I sendet HEAD.

Kann er Dateien lesen, die mit @ angegeben sind, etwa -d @body.json?

Nein. Der Parser läuft im Browser und kann keine Dateien auf deinem Rechner lesen, er zeigt also den Dateinamen und einen Hinweis. Füge den Dateiinhalt mit --data-raw ein, um den Body zu sehen.

Wie genau ist der erzeugte Code?

Methode, URL, Header und Body sind identisch, und der Body wird als derselbe String gesendet, ohne neu kodiert zu werden. Manche curl-Optionen haben kein Gegenstück: fetch kann Zertifikatsprüfungen nicht wie -k überspringen, und Browser erlauben fetch keinen Cookie-Header. Der erzeugte Code sagt das an den betreffenden Stellen in einem Kommentar. Der Python-Code übergibt allow_redirects=False, außer der Befehl hat -L, weil curl Weiterleitungen standardmäßig nicht folgt.