10 cURL-Befehlsverwendung mit Echtzeitbeispiel

cURL ist ein Kommandozeilenwerkzeug, das dazu dient, Daten mittels URL-Syntax abzurufen oder zu versenden.

Für Entwickler oder Support-Mitarbeiter ist die Kenntnis von cURL-Befehlen zur Fehlerbehebung bei Webanwendungen unerlässlich. cURL ist ein vielseitiges Tool, das auf Windows, macOS und UNIX-Systemen verwendet werden kann.

Hier sind einige der häufigsten Syntaxen mit Beispielen, um Ihnen den Einstieg zu erleichtern.

Prüfen der Verbindung zu einer URL

Wenn Sie auf einem UNIX-basierten System arbeiten und eine Verbindung zu einer externen URL herstellen möchten, sollten Sie zunächst mit cURL testen, ob der Zugriff möglich ist.

curl deineurl.de

Normalerweise wird keine Ausgabe angezeigt, wenn die Verbindung erfolgreich ist. Sollte der Server jedoch nicht erreichbar sein, erhalten Sie Fehlermeldungen wie „Host konnte nicht aufgelöst werden“.

  [[email protected] tmp]# curl nichtexistierendeurl.de
  curl: (6) Could not resolve host: nichtexistierendeurl.de; Unknown error
  [[email protected] tmp]#

Speichern der URL/URI-Ausgabe in einer Datei

Um den Inhalt einer URL oder URI in einer Datei zu speichern, können Sie folgende Syntax verwenden:

curl https://deineurl.de > deineurl.html

Beispiel:

  [[email protected] tmp]# curl https://beispiel.de > /tmp/beispielhtml
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  100 25489    0 25489    0     0  98765      0 --:--:-- --:--:-- --:--:-- 102345
  [[email protected] tmp]#

Das obige Beispiel speichert den gesamten Inhalt von beispiel.de in der Datei /tmp/beispiel.html.

Anzeigen von Anfrage- und Antwort-Headern

Bei der Fehlersuche kann es hilfreich sein, die erwarteten Anfrage- und Antwort-Header zu überprüfen.

curl -v deineurl.de

Beispiel:

  [[email protected] tmp]# curl -v https://testseite.com
  * About to connect() to testseite.com port 443 (#0)
  *   Trying 104.25.134.107...
  * Connected to testseite.com (104.25.134.107) port 443 (#0)
  * Initializing NSS with certpath: sql:/etc/pki/nssdb
  *   CAfile: /etc/pki/tls/certs/ca-bundle.crt
    CApath: none
  * SSL connection using TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
  * Server certificate:
  * 	subject: CN=ssl371609.cloudflaressl.com,OU=PositiveSSL Multi-Domain,OU=Domain Control Validated
  * 	start date: Nov 07 00:00:00 2019 GMT
  * 	expire date: May 15 23:59:59 2020 GMT
  * 	common name: ssl371609.cloudflaressl.com
  * 	issuer: CN=COMODO ECC Domain Validation Secure Server CA 2,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB
  > GET / HTTP/1.1
  > User-Agent: curl/7.29.0
  > Host: testseite.com
  > Accept: */*
  > 
  < HTTP/1.1 200 OK
  < Date: Sat, 09 Nov 2019 19:41:37 GMT
  < Content-Type: text/html; charset=UTF-8
  < Transfer-Encoding: chunked
  < Connection: keep-alive
  < Set-Cookie: __cfduid=d2ce6cd359ebc0b6eb5ff3a454ed042021573328497; expires=Sun, 08-Nov-20 19:41:37 GMT; path=/; domain=.testseite.com; HttpOnly; Secure
  < Vary: Accept-Encoding
  < Link: <https://testseite.com/wp-json/>; rel="https://api.w.org/"
  < Link: <https://testseite.com/>; rel=shortlink
  < X-SRCache-Fetch-Status: HIT
  < X-SRCache-Store-Status: BYPASS
  < X-Frame-Options: SAMEORIGIN
  < X-Powered-By: EasyEngine v4.0.12
  < Via: 1.1 google
  < CF-Cache-Status: DYNAMIC
  < Strict-Transport-Security: max-age=15552000; preload
  < X-Content-Type-Options: nosniff
  < Alt-Svc: h3-23=":443"; ma=86400
  < Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
  < Server: cloudflare
  < CF-RAY: 533243e4bcd4bbf4-LHR
  <

Herunterladen mit Geschwindigkeitsbegrenzung

Um die Downloadzeit bei einer bestimmten Geschwindigkeit zu testen, können Sie folgenden Befehl nutzen:

curl --limit-rate 2000B

Beispiel:

curl --limit-rate 2000B https://beispiel.de

Verwenden eines Proxys für die Verbindung

Dies ist besonders nützlich, wenn Sie auf einem Server in einer DMZ arbeiten und eine Verbindung zur Außenwelt über einen Proxy herstellen müssen.

curl --proxy deinproxy:port https://deineurl.de

Sie können mit cURL auch einen Header mit Ihren Daten einfügen, um bestimmte Probleme zu testen oder zu beheben. Hier ein Beispiel, wie man einen Content-Type im Header angibt:

curl --header 'Content-Type: application/json' https://deineurl.de

Dadurch wird cURL angewiesen, den Content-Type als application/json im Anfrage-Header zu übermitteln.

Wenn Sie schnell den Antwort-Header überprüfen möchten, können Sie folgende Syntax verwenden:

curl --head https://deineurl.de

Beispiel:

  [[email protected] tmp]# curl --head https://eineandereurl.de
  HTTP/1.1 200 OK
  Date: Sat, 09 Nov 2019 19:51:23 GMT
  Content-Type: text/html
  Connection: keep-alive
  Set-Cookie: __cfduid=d3cb2c7b8e566ad99c870b0af12b0f1eb1573329083; expires=Sun, 08-Nov-20 19:51:23 GMT; path=/; domain=.eineandereurl.de; HttpOnly
  X-GUploader-UploadID: AEnB2Uo96JhvJmR2zYUL-Ndh2ta3UD_ykQAB5C7O8cjZQhCf-GxHQ0MsodSzRnl3guSN3ywAYNjtWcPXfwDXjLg3bQ-P5vQMOA
  Expires: Sat, 09 Nov 2019 20:51:23 GMT
  Cache-Control: public, max-age=3600
  Last-Modified: Mon, 06 Aug 2018 10:45:47 GMT
  x-goog-generation: 1533552347482034
  x-goog-metageneration: 1
  x-goog-stored-content-encoding: identity
  x-goog-stored-content-length: 24620
  x-goog-hash: crc32c=DpDPAQ==
  x-goog-hash: md5=cIP/3rusdUx12Zla1kf1yA==
  x-goog-storage-class: MULTI_REGIONAL
  Accept-Ranges: bytes
  CF-Cache-Status: DYNAMIC
  Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
  Server: cloudflare
  CF-RAY: 53325234dc2fbb9a-LHR

  [[email protected] tmp]#

Verbindung zu einer HTTPS/SSL-URL herstellen und SSL-Zertifikatsfehler ignorieren

Beim Zugriff auf eine URL, die mit einem SSL/TLS-Zertifikat gesichert ist, kann es bei falschen oder nicht übereinstimmenden Zertifikaten zu folgender Fehlermeldung kommen:

curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.

Gute Nachricht: Mit dem Flag --insecure kann cURL angewiesen werden, Zertifikatsfehler zu ignorieren.

curl --insecure https://deineurl.de

Verbindung über ein bestimmtes Protokoll (SSL/TLS)

Dies ist sehr nützlich, um zu testen, ob eine URL ein bestimmtes SSL/TLS-Protokoll unterstützt.

Um eine Verbindung mit SSL v3 herzustellen:

curl --sslv3 https://deineurl.de

Und für verschiedene TLS-Versionen:

  curl --tlsv1 https://beispiel.de
  curl --tlsv1.0 https://beispiel.de
  curl --tlsv1.1 https://beispiel.de
  curl --tlsv1.2 https://beispiel.de
  curl --tlsv1.3 https://beispiel.de

Herunterladen einer Datei vom FTP-Server

Mit cURL können Sie auch Dateien herunterladen, indem Sie Ihren Benutzernamen und Ihr Passwort angeben:

curl -u benutzer:passwort -O ftp://ftpurl/datei.css

Sie können immer „-v“ zu jeder Syntax hinzufügen, um die Ausgabe im ausführlichen Modus zu sehen.

Der Host-Header ist nützlich, um eine Ziel-URL über die IP zu testen, wenn der angeforderte Inhalt nur bei übereinstimmendem Host-Header verfügbar ist. Oder wenn Sie die Anwendung mit Load Balancer IP/URL testen möchten.

curl --header 'Host: zielanwendung.de' https://192.0.0.1:8080/

Wie wäre es mit der Online-Nutzung von cURL?

Ja, das ist mit folgenden Tools möglich. Sie können cURL remote ausführen.

Online CURL – ein einfaches Tool zum Abrufen von URLs online, mit der Möglichkeit, folgende Optionen hinzuzufügen:

  --connect-timeout
  --cookie
  --data
  --header
  --head
  --location
  --max-time
  --proxy
  --request
  --user
  --url
  --user-agent

cURL-Befehlszeilen-Builder – Dieser ist anders. Er hilft Ihnen, den cURL-Befehl zu erstellen, indem Sie Informationen in eine übersichtliche Oberfläche eingeben und den cURL-Befehl unten erhalten.

cURL ist ein nützliches Werkzeug zur Behebung von Echtzeit-Verbindungsproblemen, und ich hoffe, die obigen Informationen helfen Ihnen dabei. Wenn Sie mehr lernen möchten, empfehle ich den Online-Kurs „Grundlagen der Linux-Befehlszeile“.