HandyTools Hub

cURL-Konverter

Konvertieren Sie cURL-Befehle in fetch-, axios- oder Python-Code

Fügen Sie einen cURL-Befehl ein, und dieser Konverter parst ihn zu einer strukturierten Anfrage und schreibt diese Anfrage als ausführbaren Code in drei verschiedenen HTTP-Clients. Er ist für den Alltag gebaut: eine Anfrage aus den Chrome DevTools, einer API-Referenzseite oder einem Bug-Report kopieren und in Anwendungscode übernehmen, ohne Methode, Header und JSON-Maskierung von Hand zu übersetzen.

Was der Konverter tatsächlich ausgibt

Jede Konvertierung erzeugt genau drei Ausgaben, jede in einem eigenen Tab:

  • JavaScript fetch — die browsernative API mit einem headers-Objekt und einem body-String.
  • JavaScript axios — ein Konfigurationsobjekt mit method, url, headers, optionalem data und optionalem auth.
  • Python requests — ein import requests, optionale headers- und data-Variablen, dann ein requests.request(...)-Aufruf.

Es gibt keine cURL-zu-Go-, Ruby-, PHP-, C#- oder HTTPie-Ausgabe und keine Gegenrichtung „Code zu cURL“. Alle drei Snippets entstehen im selben Durchlauf, ein Tab-Wechsel ist also sofort möglich und keine zweite Konvertierung nötig.

Jedes Ziel behält seine eigenen Idiome, statt eine generische Vorlage zu teilen. fetch lässt das method-Feld weg, wenn die Anfrage ein einfaches GET ist, und hängt eine .then(...)-Kette an; axios schreibt immer ein Konfigurationsobjekt und schreibt den Methodennamen klein; Python baut benannte headers- und data-Variablen vor dem Aufruf. Weil der Generator aus derselben geparsten Anfrage arbeitet, sind URL, Header-Namen und Body-String in allen drei Zielen identisch — nur die Syntax drumherum ändert sich.

Verwendung

Fügen Sie den vollständigen Befehl ein, beginnend mit curl. Der Tokenizer versteht Backslash-Zeilenfortsetzungen, einfach zitierte Strings und doppelt zitierte Strings mit maskierten Anführungszeichen, eine mehrzeilige DevTools-Kopie funktioniert also unverändert. Klicken Sie auf Konvertieren, und lesen Sie das Warnfeld, falls eines erscheint. Wechseln Sie die Tabs und kopieren Sie das benötigte Snippet. Parsen und Code-Erzeugung laufen beide in der Seite, der Befehl und enthaltene Zugangsdaten bleiben also auf Ihrem Gerät.

Der Konverter ist bewusst tolerant: Ein DevTools-Befehl über ein Dutzend Zeilen mit Tabs, abschließenden Backslashes und gemischten Anführungszeichen wird genau so geparst, wie der Browser ihn gesendet hat. Wirkt das Ergebnis falsch, ist die Warnliste die erste Anlaufstelle, denn sie nennt jedes Token, das der Parser nicht einordnen konnte. Über jedem Ausgabebereich liegen Kopieren-Schaltflächen, und der kopierte Text entspricht dem Sichtbaren, einschließlich der .then-Kette im fetch-Snippet.

Praxisbeispiel: Ein DevTools-Befehl, drei Ziele

Das mitgelieferte Beispiel ist eine typische „Als cURL kopieren“-Anfrage:

curl 'https://api.example.com/v1/users' \
  -H 'accept: application/json' \
  -H 'authorization: Bearer your-token-here' \
  -H 'content-type: application/json' \
  --data-raw '{"name":"Alice","role":"developer"}' \
  --compressed

Der Parser leitet POST ab, weil ein Flag aus der -d-Familie vorhanden ist und kein -X es überstimmt. Die URL bleibt wie geschrieben, die drei Header bleiben in Reihenfolge, und der Body ist der exakte JSON-String. Eine Warnung wird gemeldet: Unknown flag: --compressed.

Für fetch sind die bemerkenswerten Teile ein method-Feld, ein headers-Objekt und body als zitierter JSON-String:

fetch("https://api.example.com/v1/users", {
  method: "POST",
  headers: { "accept": "application/json", "authorization": "Bearer your-token-here", "content-type": "application/json" },
  body: "{\"name\":\"Alice\",\"role\":\"developer\"}",
});

Die axios-Version spiegelt dies mit method: "post", url, headers und data. Die Python-Version deklariert headers = {...}, data = '...' und ruft dann requests.request("POST", "https://api.example.com/v1/users", headers=headers, data=data) auf. In jedem Ziel ist der Body ein String, kein geparstes Objekt; der Konverter bewahrt die Payload wörtlich, statt sie neu zu interpretieren.

Unterstützte Flags und was durchfällt

cURL-FlagWirkung auf die geparste Anfrage
-X, --requestSetzt die HTTP-Methode, in Großbuchstaben
-H, --headerFügt einen Header hinzu, am ersten Doppelpunkt geteilt
-d, --data, --data-raw, --data-binary, --data-asciiFügt zum Body hinzu; mehrere Teile mit & verbunden
-u, --userErfasst Basic-Auth-Zugangsdaten
-A, --user-agentFügt den User-Agent-Header hinzu oder ersetzt ihn
-G, --getVerschiebt die Daten in den Query-String und nutzt GET
-I, --headNutzt HEAD
--urlLiefert die URL explizit

Alles, was nicht in dieser Tabelle steht — --compressed, --insecure, -k, -L, --max-time, Cookie-Jars, -F-Dateiuploads und so weiter — wird bewusst nicht konvertiert. Diese Flags werden in der Warnliste über der Ausgabe gesammelt, sodass Sie genau sehen, was übersprungen wurde, und den erzeugten Code trotzdem nutzen können. Ein Header ohne Doppelpunkt oder ein Wert-Flag ohne Argument erzeugt ebenfalls eine Warnung statt eines Fehlers. Der einzige harte Fehlschlag ist ein Befehl ohne erkennbare URL, der meldet, dass keine URL gefunden wurde.

Wie die Authentifizierung umgeschrieben wird

Zugangsdaten aus -u benutzer:passwort werden zum idiomatischen Mechanismus des jeweiligen Ziels. fetch erhält "Authorization": "Basic " + btoa("benutzer:passwort"); axios erhält auth: { username: "benutzer", password: "passwort" }; Python erhält auth=("benutzer", "passwort"). Enthält der Befehl bereits einen Authorization-Header, lässt der Generator ihn unangetastet und erzeugt keine Basic Auth obendrauf. Weil die Zugangsdaten in die Ausgabe geschrieben werden, sollte ein kopiertes Snippet, das -u verwendet hat, als sensibel behandelt werden.

Häufige Fehler und Einschränkungen

  • Mehrere -d-Teile werden mit & verkettet. Das passt meist zu application/x-www-form-urlencoded, reproduziert aber kein multipart/form-data mit Dateiteilen.
  • Unbekannte Flags entfallen. Eine --cookie-Sitzung, das Folgen von Redirects oder eine TLS-Umgehung werden im erzeugten Code nicht nachgebildet, selbst wenn die Anfrage gelingen mag.
  • -G ändert die Bedeutung der Daten. Die verbundenen Daten wandern in den Query-String, und die Ausgabeanfrage hat gar keinen Body.
  • Die Methoden-Ableitung kann überraschen. Ein Befehl mit Body und ohne -X wird zu POST; ergänzen Sie -X GET oder -G, wenn Sie eigentlich ein GET wollten.
  • Der Body ist immer ein String. Für ein sauberes Objektliteral fügen Sie die Ausgabe in Ihren Editor ein und ersetzen den maskierten String selbst.

Verwandte Tools

Häufig gestellte Fragen

Welche Ausgabesprachen kann ich erzeugen?

Genau drei: JavaScript fetch, JavaScript axios und Python requests. Es gibt keine cURL-zu-Go-, Ruby-, PHP-, C#- oder HTTPie-Ausgabe und keine Gegenrichtung, die Code in cURL verwandelt. Alle drei Snippets entstehen im selben Durchlauf, ein Tab-Wechsel erfordert also keine erneute Konvertierung.

Was passiert mit Flags wie --compressed, die der Konverter nicht kennt?

Sie werden in einer Warnliste über der Ausgabe gesammelt, statt die Konvertierung abzubrechen. Flags wie --compressed, --insecure, -k, -L, --max-time, Cookie-Jars und -F-Dateiuploads werden nicht übersetzt; die Warnungen sagen genau, was übersprungen wurde.

Wie werden mehrere -d- oder --data-Flags behandelt?

Jeder Wert wird an den Body angehängt, und die Teile werden mit einem Ampersand verbunden, was der Art entspricht, wie cURL wiederholte Daten-Flags sendet. Mit -G oder --get wird der verbundene String stattdessen als Query an die URL gehängt, und es wird kein Request-Body ausgegeben.

Wie wird -u benutzer:passwort umgewandelt?

Basic Auth wird für jedes Ziel idiomatisch: fetch erhält einen Authorization-Header, der mit btoa gebaut wird, axios erhält auth: { username, password }, und Python erhält auth=("benutzer", "passwort"). Enthält der Befehl bereits einen Authorization-Header, bleibt dieser erhalten und Basic Auth wird nicht zusätzlich erzeugt.

Wie wird die HTTP-Methode entschieden?

Ein explizites -X/--request gewinnt. Andernfalls bedeutet -I/--head HEAD, ein Daten-Flag ohne -G bedeutet POST, und alles Übrige ist GET. Ein Befehl mit Body und ohne -X wird also zu POST — die häufigste Überraschung.

Was ist der einzige Fehler, der eine Konvertierung stoppt?

Ein Befehl ohne erkennbare URL. Unbekannte Flags, fehlerhafte Header ohne Doppelpunkt und Wert-Flags ohne Argument erzeugen nur Warnungen; der generierte Code wird trotzdem erzeugt.

Geprüft vom HandyTools-Hub-Team · Zuletzt aktualisiert