终端上通过 Telnet 使用 HTTP 时出错

终端上通过 Telnet 使用 HTTP 时出错

要访问 www.ietf.org/rfc.html,我输入了以下命令:

telnet www.ietf.org 80 > log
get /rfc.html HTTP/1.1
Host: www.ietf.org

当我输入第三条命令时,显示以下消息:

Connection closed by foreign host.

日志条目如下:

> Trying 64.170.98.30...
Connected to www.ietf.org.
Escape character is '^]'.
HTTP/1.1 400 Bad Request
Date: Thu, 27 Dec 2012 09:32:01 GMT
Server: Apache/2.2.10 (Linux/SUSE) mod_ssl/2.2.10 OpenSSL/0.9.8h PHP/5.2.13 with     Suhosin-Patch mod_python/3.3.1 Python/2.6 mod_wsgi/3.3 mod_perl/2.0.4 Perl/v5.10.0
Content-Length: 226
Connection: close
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>

所以有什么问题?

答案1

假设您能够按照wgetEric Carvalho 所建议的方式检索文件(wget www.ietf.org./rfc.html),那么问题很可能是由于您发送请求的速度不够快而导致 Web 服务器挂断了您的连接。

每次检索页面时,都会与 Web 服务器的 HTTP 端口建立单独的 TCP 连接。连接后,如果您没有及时发送命令,服务器将认为连接已放弃(这种情况经常发生,尽管大多数 Web 浏览器在完成后会通过正确终止其 TCP 连接来尽量减少这种情况)。

如果你的目的只是下载页面并查看,你应该使用wgetcurlfetch代替。你可以在命令行中使用或telnet来查看文件。catless

如果您的目标是尝试使用 telnet 访问 Web 内容(例如,为了增强对 HTTP 的理解),那么您可以考虑编写一个程序或脚本(甚至可以是 shell 脚本),通过telnet获取服务器的名称和 HTTP 命令作为简单的前端,然后连接到服务器,然后快速发送命令。

相关内容