Erweiterte Konnektivitätstests mit cURL
Nachdem Sie die grundlegenden Konnektivitätstests verstanden haben, wollen wir uns mit den erweiterten Funktionen von cURL befassen, die bei der detaillierten Fehlerbehebung und beim Testen helfen können.
Verwendung des Verbose-Modus für detailliertes Debugging
Der Verbose-Modus (Option -v) ist von unschätzbarem Wert für die Fehlerbehebung bei Konnektivitätsproblemen, da er den gesamten Anfrage- und Antwortprozess anzeigt:
curl -v https://example.com
Die Ausgabe ist umfassend und zeigt die DNS-Auflösung, den TLS-Handshake, die Anfrage-Header, die Antwort-Header und mehr:
* Trying 93.184.216.34:443...
* Connected to example.com (93.184.216.34) port 443 (#0)
* ALPN: offers h2
* ALPN: offers http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server accepted h2
* Server certificate:
* subject: C=US; ST=California; L=Los Angeles; O=Internet Corporation for Assigned Names and Numbers; CN=www.example.org
* start date: Nov 24 00:00:00 2022 GMT
* expire date: Nov 24 23:59:59 2023 GMT
* subjectAltName: host "example.com" matched cert's "example.com"
* issuer: C=US; O=DigiCert Inc; CN=DigiCert TLS RSA SHA256 2020 CA1
* SSL certificate verify ok.
* using HTTP/2
* h2 [:method: GET]
* h2 [:path: /]
* h2 [:scheme: https]
* h2 [:authority: example.com]
* h2 [user-agent: curl/7.81.0]
* h2 [accept: */*]
* Using Stream ID: 1
> GET / HTTP/2
> Host: example.com
> user-agent: curl/7.81.0
> accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 200
< age: 587269
< cache-control: max-age=604800
< content-type: text/html; charset=UTF-8
< date: Tue, 28 Mar 2023 12:40:01 GMT
< etag: "3147526947+ident"
< expires: Tue, 04 Apr 2023 12:40:01 GMT
< last-modified: Thu, 17 Oct 2019 07:18:26 GMT
< server: ECS (nyb/1D2B)
< vary: Accept-Encoding
< x-cache: HIT
< content-length: 1256
<
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<!-- More HTML content -->
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents...</p>
<!-- More content -->
</div>
</body>
</html>
* Connection #0 to host example.com left intact
Diese detaillierte Ausgabe hilft Ihnen, genau zu identifizieren, wo eine Verbindung möglicherweise fehlschlägt.
Testen verschiedener HTTP-Methoden
Testen wir eine POST-Anfrage an einen Test-API-Endpunkt:
curl -X POST -d "name=test&email=test@example.com" https://httpbin.org/post
Dieser Befehl:
-X POST: Gibt eine POST-Anfrage an
-d "name=test&email=test@example.com": Sendet Formulardaten in der Anfrage
Sie sollten eine JSON-Antwort erhalten, die Ihre übermittelten Daten anzeigt:
{
"args": {},
"data": "",
"files": {},
"form": {
"email": "test@example.com",
"name": "test"
},
"headers": {
"Accept": "*/*",
"Content-Length": "32",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/7.81.0",
"X-Amzn-Trace-Id": "Root=1-642295b1-0d2340ef34f2e8ea6270241a"
},
"json": null,
"origin": "198.51.100.42",
"url": "https://httpbin.org/post"
}
Viele APIs benötigen bestimmte Header für die Authentifizierung oder um den Inhaltstyp anzugeben. Testen wir dies:
curl -H "User-Agent: MyCustomAgent" -H "Authorization: Bearer test-token" https://httpbin.org/headers
Dieser Befehl:
-H "User-Agent: MyCustomAgent": Legt einen benutzerdefinierten User-Agent-Header fest
-H "Authorization: Bearer test-token": Legt einen Authorization-Header fest
Die Antwort zeigt die in Ihrer Anfrage gesendeten Header an:
{
"headers": {
"Accept": "*/*",
"Authorization": "Bearer test-token",
"Host": "httpbin.org",
"User-Agent": "MyCustomAgent",
"X-Amzn-Trace-Id": "Root=1-642295c3-73cac0a73b34b1c93a8ce520"
}
}
Testen der Antwortzeiten für verschiedene Endpunkte
Erstellen wir ein Skript, um die Antwortzeiten für verschiedene Server zu vergleichen:
nano response_time.sh
Fügen Sie den folgenden Inhalt hinzu:
#!/bin/bash
echo "Testing response times..."
for site in google.com bing.com baidu.com duckduckgo.com yahoo.com; do
echo -n "$site: "
curl -s -o /dev/null -w "%{time_total}s" "https://$site"
echo ""
done
echo "Testing complete!"
Speichern Sie die Datei und machen Sie sie ausführbar:
chmod +x response_time.sh
Führen Sie das Skript aus:
./response_time.sh
Die Ausgabe zeigt die Antwortzeit für jede Website an:
Testing response times...
google.com: 0.187s
bing.com: 0.232s
baidu.com: 0.412s
duckduckgo.com: 0.298s
yahoo.com: 0.342s
Testing complete!
Dies ist nützlich, um die Leistung verschiedener Server zu vergleichen oder die Leistung eines Servers im Laufe der Zeit zu überwachen.
Testen der TCP-Konnektivität zu bestimmten Ports
Manchmal müssen Sie testen, ob ein bestimmter Port auf einem Server geöffnet ist. cURL kann auch dafür verwendet werden:
curl -v telnet://example.com:80
Wenn der Port geöffnet ist, sehen Sie eine Erfolgsmeldung:
* Trying 93.184.216.34:80...
* Connected to example.com (93.184.216.34) port 80 (#0)
Drücken Sie Ctrl+C, um die Verbindung zu beenden.
In ähnlicher Weise können Sie sichere Verbindungen testen:
curl -v https://example.com:443
Die ausführliche Ausgabe zeigt, ob die Verbindung erfolgreich war oder ob Probleme aufgetreten sind.