Ответ: а как же! Ведь HTTP – текстовый протокол. Всё что нужно – это дописать после получения соединения telnet две строчки: GET и HOST.
Пробуем.
telnet lexpr.ru 80
Trying 50.87.147.141...
Connected to lexpr.ru.
Escape character is '^]'.
HEAD / HTTP/1.1
HOST: www.lexpr.ru
Первые четыре строчки выдаёт телнет. Мы печатаем HEAD / HTTP/1.1, нажимаем ввод, печатаем HOST: www.lexpr.ru, нажимаем ввод два раза.
Результат:
HTTP/1.1 200 OK
Date: Thu, 03 Sep 2020 07:42:19 GMT
Server: Apache
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: store, no-cache, must-revalidate, post-check=0, pre-check=0
Set-Cookie: SESS812f3c8068cde43f97e1ca99cc55a898=d283ee9c09ccfb4fedcff715903d9f7a; expires=Sat, 26-Sep-2020 11:15:48 GMT; path=/; domain=.lexpr.ru
Upgrade: h2,h2c
Connection: Upgrade
Last-Modified: Thu, 03 Sep 2020 07:42:28 GMT
Content-Type: text/html; charset=utf-8
Connection closed by foreign host.
Тут нам важно 200 ОК, то есть сервер ответил штатно.
Теперь получаем содержание некой страницы:
telnet lexpr.ru 80
Trying 50.87.147.141...
Connected to lexpr.ru.
Escape character is '^]'.
GET /node/566 HTTP/1.1
HOST: www.lexpr.ru
Путь в строке GET печатаем от корня сайта, то есть полная ссылка будет интерпретирована сервером как www.lexpr.ru/node/566
Результат:
HTTP/1.1 200 OK
Date: Thu, 03 Sep 2020 07:38:31 GMT
Server: Apache
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Cache-Control: store, no-cache, must-revalidate, post-check=0, pre-check=0
Set-Cookie: SESS812f3c8068cde43f97e1ca99cc55a898=1955b918d4451303c2cad5fb11d032b5; expires=Sat, 26-Sep-2020 11:12:00 GMT; path=/; domain=.lexpr.ru
Upgrade: h2,h2c
Connection: Upgrade
Last-Modified: Thu, 03 Sep 2020 07:38:40 GMT
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
3d11
И далее идёт содержание страницы в виде HTML.
Вот такая нехитрая фигня.