Wie erhalte ich den Inhalt von Webseiten mit Telnet? (zum Beispiel https://stackoverflow.com/questions Inhalt der Seite)
telnet-Servername 80
GET /index.html
Du könntest es tun
telnet stackoverflow.com 80
Und dann einfügen
GET /questions HTTP/1.0
Host: stackoverflow.com
# add the 2 empty lines above but not this one
Hier ist eine Abschrift
$ telnet stackoverflow.com 80
Trying 151.101.65.69...
Connected to stackoverflow.com.
Escape character is '^]'.
GET /questions HTTP/1.0
Host: stackoverflow.com
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
...
Für die Nachwelt war Ihre Frage, wie Sie eine http-Anfrage an https://stackoverflow.com/questions
senden. Die eigentliche Antwort lautet: Mit Telnet ist dies nicht möglich, da dies eine nur über https erreichbare URL ist.
Daher möchten Sie möglicherweise openssl
anstelle von telnet
verwenden, wie dies beispielsweise der Fall ist
$ openssl s_client -connect stackoverflow.com:443
...
---
GET /questions HTTP/1.1
Host: stackoverflow.com
Dadurch erhalten Sie die https-Antwort.
Um auf frühere Antworten etwas einzugehen, gibt es einige Komplikationen.
telnet
ist nicht besonders skriptfähig; Vielleicht möchten Sie stattdessen nc
(aka netcat
) verwenden, das Eingaben außerhalb des Terminals behandelt und Signale besser signalisiert.
Im Gegensatz zu telnet
erlaubt nc
tatsächlich SSL (und somit https
anstelle von http
-Datenverkehr - Sie benötigen Port 443 statt Port 80).
Es besteht ein Unterschied zwischen HTTP 1.0 und 1.1. In der aktuellen Version des Protokolls muss der Host:
-Header in der Anforderung in einer separaten Zeile nach der POST
- oder GET
-Zeile enthalten sein. Anschließend muss eine leere Zeile folgen, um das Ende der Anforderungsheader zu markieren.
Das HTTP-Protokoll erfordert Endungen für Wagenrücklauf/Zeilenvorschub. Viele Server sind diesbezüglich nachsichtig, andere jedoch nicht. Vielleicht möchten Sie verwenden
printf "%\r\n" \
"GET /questions HTTP/1.1" \
"Host: stackoverflow.com" \
"" |
nc --ssl stackoverflow.com 443
Wenn Sie auf HTTP/1.0 zurückgreifen, benötigen Sie nicht immer den Host:
-Header, aber viele moderne Server benötigen den Header trotzdem. Wenn mehrere Sites auf derselben IP-Adresse gehostet werden, weiß der Server nicht von GET /foo HTTP/1.0
, ob Sie http://site1.example.com/foo
oder http://site2.example.net/foo
meinen, wenn diese beiden Sites auf demselben Server gehostet werden (wenn kein Host:
-Header vorhanden ist, kann ein HTTP 1.0-Server vorhanden sein Verwenden Sie einfach eine andere Site als die, die Sie möchten, damit Sie nicht den gewünschten Inhalt erhalten.
Das HTTPS-Protokoll ist in diesen Details identisch mit HTTP. Der einzige wirkliche Unterschied besteht in der anfänglichen Einrichtung der Sitzung.