10

С помощью команды 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. (То есть, чтобы содержимое ответа не загромождало вывод вашей оболочки.)

2 ответа2

21

Используйте netcat (команда nc) вместо "telnet", поэтому

cat request.txt | nc docs.python.org 80

Telnet - это быстрый и легкий взлом, но netcat, очевидно, является правильным инструментом для работы.

5

У меня нет опыта работы с telnet но он требует ввода перенаправления файлов:

telnet < abc.txt

Я могу заставить его правильно подключиться к серверу следующим образом:

$ cat abc.txt
open docs.python.org 80
$ telnet < abc.txt
telnet> Trying 82.94.164.162...
Connected to dinsdale.python.org.
Escape character is '^]'.
Connection closed by foreign host.

Возможно, вы можете понять, как заставить его принять команду GET но я не смог. Альтернативой является использование сценария expect :

#!/usr/bin/expect

spawn telnet docs.python.org 80
expect "Escape character is '^]'." { 
     send "GET /2/license.html HTTP/1.1\nHost: docs.python.org\n\n" 
}
interact

Затем вы можете сохранить скрипт как telnet.exp , сделать его исполняемым и запустить его:

./telnet.exp > output.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .