С помощью команды telnet docs.python.org 80
я могу выполнить HTTP-запрос вручную http://docs.python.org/2/license.html
, набрав фактический запрос.
Теперь, вместо того, чтобы вводить его вживую, я бы хотел отправить запрос из текстового файла.
Я попробовал это:
cat request.txt|telnet docs.python.org 80
request.txt :
GET /2/license.html HTTP/1.1
Host: docs.python.org
(Вы должны заполнить файл пустой строкой, иначе получите неверный запрос!)
Но соединение с сервером закрывается сразу.
Как я должен правильно трубы request.txt к telnet docs.python.org 80
?
редактировать:
Это хорошо знать; если вы используете HEAD
вместо GET
, вы получите такой же ответ, как если бы вы сделали GET
запрос, за исключением тела сообщения.
Итак, используйте, HEAD
если вы просто хотите изучить заголовки HTTP. (то есть, чтобы содержимое ответа не загромождало вывод вашей оболочки.)
GET
вы опубликовали, я получаю сообщение408 Request Time-out
об ошибке. Кроме того, этоwget http://docs.python.org/2/license.html
не вариант?telnet docs.python.org 80
, поэтому вам придется поторопиться и набрать эти две строки (copy paste, если necc.) В течение нескольких секунд, иначе сервер вернет ошибку тайм-аута.telnet docs.python.org 80
<ENTER>
GET /2/license.html HTTP/1.1
<ENTER>
Host: docs.python.org
<ENTER>
<ENTER>
<ENTER>
второй раз в конце, заключается в том, что протокол HTTP требует дополнительной пустой строки после заголовков запроса. См. Раздел сообщения с запросом в статье о HTTP-викиtelnet < request.txt
но я не могу заставитьGET
команду работать.Ответы:
Используйте netcat (команда nc) вместо «telnet», поэтому
Telnet - это быстрый и легкий взлом, но netcat, очевидно, является правильным инструментом для работы.
источник
У меня нет никакого опыта,
telnet
но он требует ввода перенаправления файлов:Я могу заставить его правильно подключиться к серверу следующим образом:
Возможно, вы можете понять, как заставить его принять
GET
команду, но я не смог. Альтернатива - использоватьexpect
скрипт:Затем вы можете сохранить скрипт как
telnet.exp
, сделать его исполняемым и запустить его:источник
expect
! Я выбрал ответ Давидго, потому что это лучшее решение для этого случая. Я не вижу никакой разницы в использовании между netcap и telnet для того, чего я хотел достичь. Тем не менее, спасибо за усилия, Тердон, если бы я мог больше выразить ваш ответ, я бы сделал это.nc
лучше использовать решение, вы должны принять его.interact
правильно закончить этотexpect
сценарий.interact
«дает пользователю контроль над текущим процессом, чтобы нажатия клавиш отправлялись текущему процессу, а stdout и stderr текущего процесса возвращались» (это изman expect
). Таким образом,interact
это способ дать пользователю способ фактически использовать соединение telnet.telnet
а не взаимодействовать с ним, я думаю, вам следует покончить сclose -i $spawn_id
чем-то вроде этого. Тогда скрипт выйдет. Сinteract
Я был на самом деле не в состоянии выйтиtelnet
на всех, и пришлось закрыть мой терминал. Довольно несчастен (хотя, возможно, это была частично моя вина.)