HTTP-Anfragen ohne curl erstellen
Möglicherweise arbeiten Sie auf einem Server ohne curl oder wget. Sie müssen einen Endpunkt testen, aber diese Tools fehlen. Sie können Bash verwenden, um HTTP-Anfragen direkt zu senden.
Bash verfügt über eine versteckte Funktion namens /dev/tcp. Dies ist keine echte Datei. Es handelt sich um ein spezielles Gerät, das Bash versteht. Wenn Sie in /dev/tcp/hostname/port schreiben, öffnet Bash eine TCP-Verbindung für Sie.
So funktioniert es:
Sie verwenden den exec-Befehl, um Dateideskriptoren zu verwalten. Zum Beispiel können Sie den Dateideskriptor 3 zum Lesen und Schreiben öffnen.
Die Syntax sieht so aus: exec 3<>/dev/tcp/example.com/80
Sobald diese Verbindung offen ist, können Sie Daten dorthin senden. Sie können auch Daten von dort lesen. Diese Methode zeigt Ihnen, wie das HTTP-Protokoll auf einer niedrigen Ebene funktioniert.
So führen Sie eine GET-Anfrage aus:
Um Daten abzurufen, müssen Sie die korrekten Header senden. Sie benötigen am Ende eine Leerzeile, um das Ende Ihrer Anfrage zu signalisieren.
Folgen Sie diesen Schritten:
- Legen Sie Ihre Host-, Port- und Pfadvariablen fest.
- Öffnen Sie die Verbindung mit exec.
- Verwenden Sie printf, um die GET-Anfrage zu senden. Verwenden Sie \r\n für Zeilenendungen.
- Verwenden Sie cat oder eine Schleife, um die Antwort zu lesen.
- Schließen Sie den Dateideskriptor, wenn Sie fertig sind.
Beispielskript:
HOST="example.com" PORT=80 REQUEST_PATH="/" exec 3<>/dev/tcp/${HOST}/${PORT} printf "GET ${REQUEST_PATH} HTTP/1.0\r\nHost: ${HOST}\r\n\r\n" >&3 cat <&3 exec 3>&-
Diese Technik hilft Ihnen zu verstehen, wie Clients und Server miteinander kommunizieren. Es ist eine nützliche Fähigkeit für das Debugging auf minimalistischen Systemen.