it-swarm.com.de

So senden Sie eine HTTP-Anfrage mit Telnet

Wie erhalte ich den Inhalt von Webseiten mit Telnet? (zum Beispiel https://stackoverflow.com/questions Inhalt der Seite)

39
omtcvxyz

telnet-Servername 80 


GET /index.html

24
ngille

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
...
57
stefan bachert

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.

23
dulaccc

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.

0
tripleee