我从 bash 尝试了这个:
GET http://cetatenie.just.ro HTTP/1.1
它工作正常,我能够获取页面,然后我尝试从 telnet 执行此操作:
telnet cetatenie.just.ro 80
Trying 85.120.166.76...
Connected to cetatenie.just.ro.
Escape character is '^]'.
GET / HTTP/1.1
Host: cetatenie.just.ro
我收到Internal Server Error
(Http 错误代码 500)
问题是,我实际上无权访问服务器(它是部署在 IIS 7 上的应用程序)。为什么执行 GET 有效,而通过 telnet 访问却无效?
我所能想到的只是我需要发送一些额外的标头。我尝试使用 Live Http Headers 并发送与它们相同的内容:
http://cetatenie.just.ro/
GET http://cetatenie.just.ro/ HTTP/1.1
Host: cetatenie.just.ro
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Proxy-Connection: keep-alive
Cookie: .ASPXANONYMOUS=Ij8RLazqzAEkAAAAMTk5ZjY0MGUtYWU0NC00ZmViLTgyNTgtMWU0MjNlM2IyZWEx0; language=en-US
但它仍然不能与 telnet 一起工作。
答案1
服务器(服务器:Microsoft-IIS/7.5)也需要-headerHOST
以及USER-AGENT
-header,我尝试过这个:
telnet cetatenie.just.ro 80
Trying 85.120.166.76...
Connected to cetatenie.just.ro.
Escape character is '^]'.
GET / HTTP/1.1
HOST: cetatenie.just.ro
USER-AGENT: Foobar
并且它成功了。
答案2
我按照您描述的方式尝试了,但仍失败。
但我设法让它工作了。
添加用户代理标头。例如“User-Agent: wget/1.12”
您可能还想添加连接标头。
例如“连接:保持活动”或“连接:关闭”
如果您想诊断类似问题,只需加载 wireshark 之类的工具。它适用于 Windows、Linux 和 Mac。这是在查看 wget 为何也能正常工作时。我猜是 user-agent 字段,然后使用 telnet 手动验证它。果然 - 成功了!。