curl-Befehle erstellen und umwandeln
Erstelle curl-Befehle und wandle sie in fetch, Python und HTTPie um.
Über dieses Tool
Gib Methode, URL, Header, Body und Authentifizierung ein, um einen sofort ausführbaren curl-Befehl zu erhalten, oder füge einen vorhandenen curl-Befehl ein, um ihn zu bearbeiten. Jede Anfrage wird auch als JavaScript-fetch, Python-requests und HTTPie angezeigt. Nichts wird gesendet: Das Tool schreibt nur die Befehle.
So verwendest du es
- Füge einen vorhandenen curl-Befehl ein, um ihn zu importieren, zum Beispiel aus den Entwicklertools deines Browsers (Copy as cURL).
- Oder lege Methode und URL fest und füge dann Header, Authentifizierung und einen JSON-, Formular- oder Roh-Body hinzu.
- Wähle Optionen wie Weiterleitungen folgen oder Antwort-Header anzeigen.
- Kopiere das Ergebnis als curl, JavaScript-fetch, Python-requests oder HTTPie.
Fragen
- Wie sende ich JSON mit curl?
- Nutze -H 'Content-Type: application/json' zusammen mit --data-raw '{"key":"value"}'. Neuere curl-Versionen haben auch --json, das den Content-Type- und den Accept-Header für dich setzt. Wähle hier JSON als Body-Typ, dann werden die richtigen Flags hinzugefügt.
- Sendet dieses Tool meine Anfrage?
- Nein. Es schreibt nur Code. Nichts verlässt deinen Browser, daher kannst du gefahrlos Befehle mit Tokens einfügen. Trotzdem ist es gute Praxis, echte Geheimnisse durch Platzhalter zu ersetzen, bevor du einen Befehl teilst.
- Was ist der Unterschied zwischen -d und --data-raw?
- Bei -d wird ein Wert, der mit @ beginnt, aus einer Datei gelesen. --data-raw sendet den Text genau so, wie er geschrieben ist – sicherer für JSON und für Werte, die mit @ beginnen könnten.
- Warum folgt curl keinen Weiterleitungen?
- Standardmäßig zeigt curl die Weiterleitungsantwort selbst an. Füge -L (Weiterleitungen folgen) hinzu, um zur neuen Adresse zu gehen. fetch und die meisten Bibliotheken folgen Weiterleitungen automatisch.
- Welche curl-Optionen lassen sich importieren?
- Methode, URL, Header, die Daten-Optionen, --json, -u, User-Agent, Cookies, Referer, -G, -L, -i, -s, -k, -v, --head und --compressed. Multipart-Felder mit -F und andere seltene Optionen werden mit einem Hinweis übersprungen.
- Wie sende ich Formulardaten mit curl?
- curl -d "name=Ada&role=admin" URL sendet ein URL-kodiertes Formular und stellt die Methode von selbst auf POST um. Nimm --data-urlencode "q=hello world", wenn ein Wert Leerzeichen oder Sonderzeichen enthält. Datei-Uploads brauchen Multipart mit -F "file=@photo.jpg", das dieses Tool beim Import überspringt, ergänze es also von Hand.
- Wie füge ich einer curl-GET-Anfrage Query-Parameter hinzu?
- Schreib sie in die URL und setze die ganze URL in doppelte Anführungszeichen, weil & und ? für die Shell eine Bedeutung haben. Oder halte sie mit -G --data-urlencode "q=red shoes" getrennt, was die kodierten Werte an die URL anhängt, statt einen Body zu senden. Der Import hier versteht -G und verschiebt die Werte in die URL.
- Wie sehe ich die Response-Header mit curl?
- -i gibt die Statuszeile und die Header vor dem Body aus. -I (--head) sendet eine HEAD-Anfrage und zeigt nur die Header, manche Server antworten auf HEAD aber anders als auf GET. -v zeigt zusätzlich die Request-Header und den TLS-Handshake, was beim Debuggen von Weiterleitungen, Authentifizierung oder Zertifikatsfehlern hilft.
curl in Python requests umwandeln: so geht’s
Füge den curl-Befehl in das Importfeld ein und wähle Python. Header werden zu einem Dict, ein JSON-Body wird zu json=payload, sodass requests ihn serialisiert und den Content-Type setzt, und Formular- oder Roh-Bodys werden zu data=payload. Basic Auth aus -u wird zu auth=(user, password), und -k wird zu verify=False. Ein Bearer-Token bleibt als Authorization-Eintrag in den Headern.
Zwei Zeilen könnten dich überraschen. requests folgt Weiterleitungen standardmäßig, curl nicht, deshalb ergänzt der Code allow_redirects=False, sofern der curl-Befehl kein -L hatte. requests hat außerdem keinen Standard-Timeout und kann bei einem hängenden Server ewig warten, deshalb wird timeout=30 ergänzt. Behalte es oder ändere die Zahl. Dieselbe Anfrage gibt es per Klick auch als JavaScript-fetch und HTTPie.
Warum funktioniert eine Anfrage mit curl, aber nicht mit fetch?
Meist liegt es an CORS. curl schickt die Anfrage und gibt aus, was zurückkommt, aber ein Browser lässt deine Seite eine Cross-Origin-Antwort nur lesen, wenn der Server das mit Access-Control-Allow-Origin erlaubt. Browser weigern sich außerdem, manche Header wie Cookie und Host aus Code zu setzen. Derselbe fetch-Code in Node kennt keine CORS-Prüfungen und verhält sich daher wie curl.
Einen funktionierenden Ausgangspunkt bekommst du, indem du in den Entwicklertools deines Browsers den Tab „Netzwerk“ öffnest, mit der rechten Maustaste auf die Anfrage klickst und „Copy as cURL“ wählst. Unter Windows nimm die bash-Variante, weil die cmd-Variante anders escapt. Der kopierte Befehl enthält viele Browser-Header, die du selten brauchst, etwa sec-ch-ua und lange Cookies, lösche sie also vor dem Umwandeln in der Header-Liste.
HTTPie vs. curl: die Syntax im Vergleich
curl ist fast überall installiert, auch auf macOS und ab Windows 10. HTTPie (der Befehl http) hat eine kürzere Syntax und färbt die Ausgabe ein. Header schreibt man als Name:value ohne -H, Formularfelder als name=value mit --form, --follow ersetzt -L und --verify=no ersetzt -k. Der erzeugte HTTPie-Befehl übergibt JSON-Bodys per Here-String, was in bash und zsh funktioniert, aber nicht in PowerShell.
Für Basic Auth bauen curl -u user:password und HTTPie -a user:password beide den Authorization-Header für dich. Die Zugangsdaten sind nur Base64-kodiert, nicht verschlüsselt, wie das Base64-Tool zeigen kann, schick sie also immer über HTTPS. Für Tokens nutzt curl -H "Authorization: Bearer TOKEN" und HTTPie -A bearer -a TOKEN. Importierst du einen curl-Befehl, wandert ein Bearer-Header automatisch in die Auth-Felder.
Funktioniert etwas nicht, oder sieht ein Ergebnis falsch aus? Ein Problem mit diesem Tool melden