为了进行研究,我希望获取 apache 在响应请求时发送的实际原始输出,包括所有获取数据、标头和 html。我该怎么做?我尝试过:
wget --output-document=response.txt -S "http://thewebsiteinquestion.com"
这向我展示了所有分层的响应标头,并将 HTML 发送到 response.txt,但我真正想看到的是原始文本及其格式。
答案1
我想这可以用 wget 来完成,但我知道如何用 curl 来完成。yum install curl
或者如果您尚未安装操作系统,可以使用其他任何操作系统:
curl -vv http://thewebsiteinquestion.com
输出将显示来自服务器的原始响应,包括标头和正文,如您所愿。这纯粹是个人喜好问题,但我发现它curl
比 更适合用于测试和开发,也更直观wget
。
有时使用和讲原始 HTTP 也很有帮助telnet
。作为系统管理员/开发人员,我发现这很有价值。例如:
$ telnet google.com 80
Trying 74.125.239.0...
Connected to google.com.
Escape character is '^]'.
GET / HTTP/1.0
Host: google.com
HTTP/1.0 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Thu, 20 Sep 2012 22:31:32
... the rest ommitted
您只需手动输入GET / HTTP/1.0
和Host: google.com
行。然后按两次回车键。这样,您就能真正看到来自远程 HTTP 服务器的完整响应,而不会受到任何干扰。随着您不断尝试,您会更好地了解 HTTP 的工作原理,并且永远不会在重定向发生时感到困惑(如您通过 HTTP 状态301
和Location
标头所见),并且您的工具(浏览器、wget、curl)会自动为您处理它们。
编辑:如何使用 传递 GET 参数telnet
。当您使用 HTTP 时,只需将它们添加到您要获取的路径中:
$ telnet thewebsite.co.uk 80
Trying 95.131.67.221...
Connected to thewebsite.co.uk.
Escape character is '^]'.
GET /?foo=bar HTTP/1.0
Host: thewebsite.co.uk
HTTP/1.1 200 OK
Date: Fri, 21 Sep 2012 17:43:27 GMT
Server: Apache/2.0.63 (Unix) mod_ssl/2.0.63 OpenSSL/0.9.8e-fips-rhel5 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635
Last-Modified: Mon, 01 Jun 2009 20:10
...
要执行 POST 查询,您必须计算提交数据的长度并将其放入Content-Length
,如下所示:
$ telnet www.yahoo.com 80
Trying 72.30.38.140...
Connected to ds-any-fp3-real.wa1.b.yahoo.com.
Escape character is '^]'.
POST / HTTP/1.0
User-Agent: telnet
Host: www.yahoo.com
Accept: */*
Content-Length: 8
Content-Type: application/x-www-form-urlencoded
p=foobar
HTTP/1.0 200 OK
Date: Fri, 21 Sep 2012 17:57:35 GMT
P3P: policyref="http://info.yahoo.com/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC GOV"
Cache-Control: private
X-Frame-Options: SAMEORIGIN
...
答案2
将选项添加--save-headers
到wget
命令行。