10 curl-Tricks, die es wert sind zu wissen

Jak skopiować curl request z przeglądarki

Begegnung mit dem vorherigen Eintrag, der die Grundlagen einführte curl es ist Zeit für fortgeschrittene Techniken und Tricks, die es wert sind, unseren Fähigkeiten hinzugefügt zu werden.

Ob Sie ein Entwickler, Tester oder einfach nur ein Curl-Benutzer sind, der die Arbeit mit der API vereinfacht – dieser Eintrag kann für Sie nützlich sein!

Übrigens muss ich Sie erwähnen: Julia Evans erstellt wunderbare, gezeichnete cheatsheets für verschiedene Netzwerkwerkzeuge, Terminal-Befehle (linux / unix), hat vor einiger Zeit einen solchen Download für curl:

Wenn Sie sie noch nicht kennen, achten Sie darauf, einen Blick darauf zu werfen wizardzines.com

Liste der Tricks:

  1. Antwort mit Serverheadern
  2. Die Curl-Dokumentation ist immer zur Hand
  3. Senden von Formularen aus dem Terminal
  4. Hochladen von Dateien über curl
  5. Hochladen einer Datei über curl
  6. Fortsetzen des Herunterladens einer Datei
  7. Mehrere Dateien gleichzeitig hochladen
  8. Herunterladen mehrerer Dateien basierend auf einer Liste von Links
  9. Zeigt den Fortschrittsbalken für den Download an
  10. Erstellen und Automatisieren von URLs
  11. Der Bonus-Trick besteht darin, Curl direkt aus dem Browser zu kopieren

Wenn wir eine GET-Anfrage an die API senden, verwenden Sie curl im Grunde werden wir so etwas bekommen:

curl example.com

und als Antwort ist der HTML-Code dieser Seite

<!doctype html>
<html>
<head>
    <title>Example Domain</title>

    <meta charset="utf-8" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <style type="text/css">
    body {
...


Wir können jedoch die Option verwenden -i oder --include, um auch die Antwortheader des Servers zu erhalten

curl -i example.com

Ergebnis:

HTTP/1.1 200 OK
Age: 557583
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Thu, 16 Feb 2023 15:18:07 GMT
Etag: "3147526947+ident"
Expires: Thu, 23 Feb 2023 15:18:07 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (nyb/1D18)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256

<!doctype html>
<html>

Es kann auch sein, dass wir nur an Überschriften interessiert sind und den Antworttext weglassen möchten, dann müssen wir die Option verwenden -I (--head) das heißt, der Modus “nur info”.

curl -I example.com

2. Die Curl-Dokumentation ist immer zur Hand

Die Online-Dokumentation von curl ist nicht mein Favorit. Ich werde ehrlich sagen, dass es mir nicht gut ansieht, glücklicherweise ist die Konsolenversion viel angenehmer und es gibt eine Option zur Auswahl

  • curl -h – um kurze Hinweise zu den beliebtesten Curl-Optionen zu erhalten
  • curl -h all – um alle Optionen mit kurzen Beschreibungen zu überprüfen
~$ curl -h

Usage: curl [options...] <url>
 -d, --data <data>            HTTP POST data
 -f, --fail                   Fail silently (no output at all) on HTTP errors
 -h, --help <category>        Get help for commands
 -i, --include                Include protocol response headers in the output
 -o, --output <file>          Write to file instead of stdout
 -O, --remote-name            Write output to a file named as the remote file
 -s, --silent                 Silent mode
 -T, --upload-file <file>     Transfer local FILE to destination
 -u, --user <user:password>   Server user and password
 -A, --user-agent <name>      Send User-Agent <name> to server
 -v, --verbose                Make the operation more talkative
 -V, --version                Show version number and quit

This is not the full help, this menu is stripped into categories.
Use "--help category" to get an overview of all categories.
For all options use the manual or "--help all".


3. Senden von Formularen vom Curlem-Terminal

Wenn Sie alle Optionen auflisten, werden Sie die Option definitiv bemerken -F, --form – dies ist eine Option, mit der Sie ein Formular ausfüllen können, um eine Nachricht zu senden.

Angenommen, wir haben ein so einfaches Anmeldeformular:

<form action="/register" method="POST">
  <input type="text" name="username">
  <input type="email" name="email">
  <input type="submit" value="Submit">
</form>

Um es zu testen, führen wir wahrscheinlich die folgende Abfrage aus, die das Verhalten der Schaltfläche Senden (submit) simulieren sollte:

curl -X POST example.com/register 
     -H "Content-Type: application/x-www-form-urlencoded" 
     -d "username=testUser&[email protected]"

Wir müssen nicht hinzufügen -H "Content-Type: application/x-www-form-urlencoded", weil es der Standardtitel ist.

Der angegebene Typ application/x-www-form-urlencoded bedeutet, dass der Text der an den Server gesendeten HTTP-Anfrage eine lange ist query string dh Schlüssel = Wert-Paare mit einem getrennten kaufmännischen und-Zeichen (&).
Was sehen wir in jedem Fall in der Abfrage als: "username=testUser&[email protected]"

Okay, aber was ist, wenn ich es wirklich habe lang query string, oder ich möchte senden datei in der Anwendung mit curl?

Dann kehren wir zu den Optionen zurück -F.

→ senden eines Formulars mit einer POST-Methode mit einem Flag -d Curl

curl -X POST example.com/register 
     -d "username=testUser&[email protected]"

→ senden eines Formulars mit einer POST-Methode mit einem Flag -F Curl,
dann die Methode -X POST ist optional:

curl example.com/register 
   -F "username=testUser" 
   -F "[email protected]"

Nach der Dokumentation des Formulars Typ application/x-www-form-urlencoded dies ist nicht geeignet, wenn wir zum Beispiel binäre Daten laden möchten (nicht alphanumerische Daten.datei) oder einfach eine große payload. In diesem Fall müssen Sie den Typ verwenden multipart/form-data

curl Daten an das Form-Tag übergeben

Hier ist ein Beispiel für das Senden eines Formulars sofort mit dem Hochladen eines Bildes:

curl example.com/register 
   -F "username=testUser" 
   -F "[email protected]" 
   -F "[email protected]"

und das bringt uns zum nächsten Punkt …

4. Hochladen von Dateien über curl

Wir können die lokale Datei per Befehl laden / laden curl. Wir können eine Datei hinzufügen, die sich an der gleichen Stelle wie der curl-Befehl befindet, der Dateiname muss mit einem Symbol versehen sein @.

Ich werde ein ähnliches Beispiel geben:

curl example.com/upload 
     -F "[email protected]"

sie können jedoch auch alle Parameter explizit hinzufügen (POST-Methode und content type):

curl -X POST example.com/upload 
     -H "Content-Type: multipart/form-data" 
     -F "[email protected]"

5. Hochladen einer Datei über curl

Wir können eine Datei mit dem gleichen Namen wie die Quelldatei auf dem Server hochladen.
Parameter -O / --remote-name es zeigt auf die (binäre) Quelldatei, wenn Sie sie also nicht übergeben, kann curl sie nicht laden und gibt einen Fehler zurück (und kann im besten Fall eine grundlegende GETa ausführen).

curl -O example.com/file.pdf

Lassen Sie uns zum Beispiel den Download mit den Konsolenwerkzeugen herunterladen:

curl -O https://wizardzines.com/networking-tools-poster.pdf

vs wenn du es vergessen hast -O:

curl https://wizardzines.com/networking-tools-poster.pdf

Ein Beispiel, das Ihnen eine Datei mit dem Namen herunterlädt 000-adr-template.md:

~$ curl -O https://gist.githubusercontent.com/ritaly/1d15b6c96c6bae86597684864ba85e6e/raw/96bfc801ec386de1ae9b331f9e87d97f0e452384/000-adr-template.md

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   379  100   379    0     0   3131      0 --:--:-- --:--:-- --:--:--  3828

% – Zeigt den Download-Status in Prozent an;
Total-zeigt den Download-Status in Bytes an (das zusätzliche M bedeutet in Megabyte);

Laden einer Datei über curl mit einem neuen Namen

Feine Mischung mit Option -o das heißt, das Hochladen einer Datei unter einem anderen Namen als dem, unter dem sich die Datei auf dem Server befindet:

curl example.com/file.pdf -o new_file.pdf

6. Fortsetzen des Herunterladens einer Datei

Wenn wir aus irgendeinem Grund mit dem Herunterladen der Datei begonnen haben und eine Unterbrechung aufgetreten ist, können wir fortfahren

curl -C - -O  example.com/file.pdf

7. Mehrere Dateien gleichzeitig hochladen

curl -O example.com/file1.pdf 
     -O example.com/file2.pdf 
     -O example.com/fileX.txt

8. Herunterladen mehrerer Dateien basierend auf einer Liste von Links

Mit mehreren Dateien, die wir hochladen möchten, können wir eine Beispieldatei mit Links erstellen und alles mit einem einzigen Befehl laden.

Angenommen, wir haben eine Datei myurls.txt, die einen Verweis auf jede neue Zeile enthält

example.com/file1.pdf
example.com/file2.pdf
example.com/fileX.txt

Wir können die folgende Operation im Terminal ausführen:

xargs -n 1 curl -O < myurls.txt

9. Zeigt den Fortschrittsbalken für den Download an

Sie haben Hunderte von Downloads und möchten wissen, welche % heruntergeladen wurden? Oder ist Ihre Datei wirklich groß?
Kein Problem! Option -# fügt einen Fortschrittsbalken hinzu

curl -# -O example.com/hugefile.pdf

zum Beispiel.

curl -# -O https://jvns.ca/wizard-zine.pdf

Und im Werbegeschenk haben Sie ein Supermagazin von Julia Evans zum Lesen.

Url globbing-Erstellen und Automatisieren des Abrufs von Curl ’em-URLs

Curl hat eine bestimmte Option, die auf die einfachsten Sanity-Tests und andere interessante Automatisierungen angewendet werden kann, von denen ich selbst ziemlich spät erfahren habe, dh nur Url globbing.

Wir brauchen einen Bereich von URLs, die im Grunde gleich sind -nur ein kleiner Teil davon ändert sich zwischen Anfragen. Ein Beispiel wäre beispielsweise die Überprüfung, dass alle URLs eines bestimmten Bereichs (numerischer Bereich, eine Reihe von Namen) auf der Seite 200 entsprechen, wir wissen, dass die Adressen fest sind und das Format haben example.com/[rok]/[miesiac]/posts

Um einen numerischen Bereich zu übergeben, müssen wir Folgendes verwenden eckige KlammernÜberprüfen Sie dieses Beispiel:

curl https://jsonplaceholder.typicode.com/posts/[1-5]

(je nachdem, welche Konsole Sie verwenden, können zusätzliche Klammern erforderlich sein []. auf dem Mac habe ich dieses Problem nicht, aber unter Windows kann die Konsole einen Verweis auf einen umgekehrten Schrägstrich machen, oder Sie sollten Anführungszeichen verwenden)

curl https://jsonplaceholder.typicode.com/posts/[1-5]
curl "https://jsonplaceholder.typicode.com/posts/[1-5]"

curl fragt automatisch nach Endpunkten für Nachrichten 1 bis 5 ab.

Anstatt nach jeder 1 ID zu fragen, hindert Sie nichts daran, den Parameter “jeder Schritt” nach dem Doppelpunkt hinzuzufügen :. Zum Beispiel möchten wir jeden dritten Beitrag überprüfen:

curl "https://jsonplaceholder.typicode.com/posts/[1-20:3]"

Wir können einen bestimmten Bereich übergeben, z. B. id = 3, 10, 25, 8, dafür verwenden wir geschweifte Klammern um eine Parameterliste zu übergeben.
Das Terminal markiert die Klammern als Sonderzeichen, sodass Sie sie anzeigen oder Anführungszeichen verwenden müssen

curl https://jsonplaceholder.typicode.com/posts/{3,10,25,8}
curl "https://jsonplaceholder.typicode.com/posts/{3,10,25,8}"

Das Ergebnis dieser Abfrage können wir in einer Datei mit der Option Vergessen speichern -o. außerdem können wir diese Speicherung automatisieren, so dass jedes Ergebnis eine eigene Ergebnisdatei erhält, die ausreicht, um eine Vorlage mit einem Symbol zu erstellen #1. dieser Ort wird durch die folgenden Werte aus unserem Bereich ersetzt

curl https://jsonplaceholder.typicode.com/posts/{3,10,25,8} -o output#1.txt
curl "https://jsonplaceholder.typicode.com/posts/{3,10,25,8}" -o output#1.txt

curl URL-Abfrageautomatisierung

Wenn wir das zusätzlich mit der Fortschrittsleiste verbinden -#, dann sehen wir, wie nachfolgende Anfragen geladen werden:

curl https://jsonplaceholder.typicode.com/posts/{3,10,25,8}/ -o output#1.txt -#

Wir können auch Dateien auf diese Weise hochladen

curl -O "http://example.com/img/[001-100].png"

ob numerische Bereiche mit einem alphabetischen Bereich oder einer Parameterliste kombiniert werden:

curl -O "http://example.com/{alfa,beta,gamma,delta}/[100-600:50]x[100-600:50].jpg"

Zurück zum ersten Beispiel: example.com/[rok]/[miesiac]/posts

wenn das Jahr im Format YYYY zwischen 2013-2023 und Monaten im Format mm liegt, reicht es aus:

curl -O "http://example.com/[2013-2023]/[01-12]"

BONUS: Wie kopiere ich eine HTTP-Anfrage aus dem Browser als curl?

Ich habe es völlig vergessen, aber nachdem ich Julias Tweet zu Beginn eingefügt hatte, entschied ich, dass es sicherlich einen Trick wert war.

Wir können als Befehl kopieren curl. jede HTTP-Anfrage, die in unserem Browser ausgeführt wird, ist Chrome / Firefox oder Safaria, obwohl ich glaube, dass auch andere Browser diese Möglichkeit ermöglichen.

  1. Öffnen DevTools Lesezeichen Netzwerk (“Netzwerk”, wenn Sie die polnische Version verwenden).
  2. Klicken Sie mit der rechten Maustaste (oder drücken Sie Strg) auf request.
  3. Tippen Sie auf Kopieren → Als cURL kopieren

wie kopiere ich eine HTTP-Anforderung als Curl aus dem Browser

Bereit, uns in Aktion zu sehen:

More To Explore

Haben Sie ein Projekt im Sinn?

Kontaktieren Sie uns:

small_c_popup.png