使用命令,我可以通过输入实际请求telnet docs.python.org 80
来向发出手动 HTTP 请求。http://docs.python.org/2/license.html
现在,我不想实时输入,而是想从文本文件中提供请求。
我尝试了这个:
cat request.txt|telnet docs.python.org 80
请求.txt:
GET /2/license.html HTTP/1.1
Host: docs.python.org
(您必须用一个空白行结束文件,否则您将收到错误请求!)
但与服务器的连接立即关闭。
我应该如何正确地管道请求.txt到telnet docs.python.org 80
?
编辑:
知道这一点很有用;如果您使用HEAD
而不是GET
,您将获得与发出请求相同的响应GET
,消息正文除外。
因此,HEAD
如果您只想检查 HTTP 标头,请使用 。(即,这样响应的内容就不会弄乱您的 shell 输出。)
答案1
使用 netcat(nc 命令)而不是“telnet”,因此
cat 请求.txt | nc docs.python.org 80
Telnet 是一种快速而简单的黑客攻击方式,但 netcat 显然是适合这项工作的正确工具。
答案2
我确实没有任何经验,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