[实践OK]curl命令获取HTTP头文件,Curl下面用Post加-d访问后无法单独获取PUT方式的HTTP头,得用curl -s -d'test=test' -D- -o/tmp/null.txt http://xxxxxxxx.com/post.php 。

jackxiang 2013-4-8 10:33 | |
经实践和抓包测试发现,不能将-d和-I一起用的原因是-d是POST方式,而 -I 则是PUT方式,且-I并没有内容返回,只是返回服务器的Header头部信息,两者混用就会出现矛盾,所以提示:Warning: You can only select one HTTP request method! You asked for both POST
Warning: (-d, --data) and HEAD (-I, --head).

一、下面这中方法,CURL的方式进行Post数据同时,并显示出头部Header信息:
curl -s -d'test=test' -D- -o/tmp/null.txt http://coding.jackxiang.com/src-ui/postcaptcha.php   #注意-D 后面的-,表示输出“文件”是标准输出。
上面命令行细节如下:-D- :D后面有一个中间杠:
-s 不输出:Total    % Received % Xferd  Average Speed   Time    Time     Time  Current信息

HTTP/1.1 200 OK
Server: openresty
Date: Tue, 30 May 2023 08:19:58 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding

cat /tmp/null.txt
Array
(
    [test] => test
)
======Wireshark抓包如下(有数据从服务器上返回)======
经实测发现并不是真正的Head方法:


二、而如果真用Head方法,则是这样的:
curl -I http://coding.jackxiang.com/src-ui/postcaptcha.php
HTTP/1.1 200 OK
Server: openresty
Date: Tue, 30 May 2023 08:21:39 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding

======Wireshark抓包如下(只返回Header头,没有其它数据从服务器上返回)======
HEAD /src-ui/postcaptcha.php HTTP/1.1
Host: coding.jackxiang.com
User-Agent: curl/7.87.0
Accept: */*

HTTP/1.1 200 OK
Server: openresty
Date: Tue, 30 May 2023 08:16:52 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
Vary: Accept-Encoding


POST的demo代码基础测试:
curl -d"test=test" http://coding.jackxiang.com/src-ui/postcaptcha.php
Array
(
    [test] => test
)
postcaptcha.php


curl中的-I选项使用HEAD方法自动发出http请求,是指哪些请求呢?
在cURL中,使用-I选项会发出一个HEAD方法的HTTP请求。HEAD方法是HTTP协议中的一种请求方法,它类似于GET方法,但服务器只返回响应头部信息而不返回实际的响应内容主体。
当你使用curl -I <URL>命令时,-I选项会告诉cURL发送一个HEAD请求,并返回服务器对该请求的响应头部信息。这对于获取有关资源的元数据、检查资源的状态或验证资源是否存在等场景非常有用,而无需获取整个响应内容。
请注意,由于HEAD方法只返回响应头部信息,因此响应的主体部分为空。这使得HEAD请求比GET请求更轻量级,因为它不需要传输和处理响应的实际内容。
总结起来,curl -I <URL>会发送一个HEAD请求,并返回服务器对该请求的响应头部信息,而不返回响应的主体内容。
[/codes]




附:
The -I option tells curl to do a HEAD request while the -d'test=test' option tells curl to do a POST, so you're telling curl to do two different request types.
curl -s -d'test=test' -D- -o/dev/null http://coding.jackxiang.com/src-ui/postcaptcha.php
or, on Windows:
curl -s -d'test=test' -D- -onul: http://coding.jackxiang.com/src-ui/postcaptcha.php

背景:有时一个页面莫名奇妙变为:您请求的页面发生错误! 这显然是经过http做的http头的redirect,于是否怎么知道呢?用curl
curl命令获取HTTP头文件:


看下Cookie吧:

用Curl试试看,主要是看Cookie的过期时间,是怎么发送的:


一)其实用HttpWatcher也能看到Http给浏览器发送的头的Cookie时间,如下:

二)用Fiddler2也能看,在返回(下面),选 header也能看到Cookie的过期时间。(想了解整个可以在Url上右键,后选:Copy --> Header Only。)
三)用Firefox下的firebug也能看到时间。
四)Chrome也能看,F12调出开发者工具后,Resources Cookies 域名里就有它。(它对Cookie的时间作了列分割,前面都是大大的显示出来。)

看到了吧:Location: http://w.xiyou.cntv.cn/error.html  ,它就是转向的根源,它向浏览器发送了这样一个http的头,于是你就看到了这个转向了的页面。



以下来自:
http://blog.csdn.net/anljf/article/details/6858599

# curl -I URL
该选项功能:
  -I/--head
              (HTTP/FTP/FILE)  Fetch  the  HTTP-header only! HTTP-servers feature the command HEAD which this uses to get nothing but the header of a document. When used on a FTP or
              FILE file, curl displays the file size and last modification time only.
              If this option is used twice, the second will again disable header only.

响应消息
响应消息的第一行为下面的格式:
HTTP-VersionSPStatus-CodeSPReason-PhraseCRLF
HTTP -Version表示支持的HTTP版本,例如为HTTP/1.1。
Status-Code是一个三个数字的结果代码。
Reason-Phrase给 Status-Code提供一个简单的文本描述。
Status-Code主要用于机器自动识别,Reason-Phrase主要用于帮助用户理解。
Status-Code的第一个数字定义响应的类别,后两个数字没有分类的作用。第一个数字可能取5个不同的值:
1xx:信息响应类,表示接收到请求并且继续处理
2xx:处理成功响应类,表示动作被成功接收、理解和接受
3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理
4xx:客户端错误,客户请求包含语法错误或者是不能正确执行
5xx:服务端错误,服务器不能正确执行一个正确的请求

典型的响应消息:
HTTP/1.0200OK
Date:Mon,31Dec200104:25:57GMT
Server:Apache/1.3.14(Unix)
Content-type:text/html
Last-modified:Tue,17Apr200106:46:28GMT
Etag:"a030f020ac7c01:1e9f"
Content-length:39725426
Content-range:bytes554554-40279979/40279980

HTTP/1.1 200 OK
Server: nginx/1.0.4
Date: Mon, 10 Oct 2011 01:36:14 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.6
Set-Cookie: PHPSESSID=6a2vrl3c7399av3nge4ti66432; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
上例第一行表示HTTP服务端响应一个GET方法
Date头域
Date头域表示消息发送的时间,时间的描述格式由rfc822定义。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的时间表示世界标准时,换算成本地时间,需要知道用户所在的时区。
Vary: Accept-Encoding:浏览器能够进行解码的数据编码方式
Connection: 表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接)
Cookie:这是最重要的响应头信息之一
Pragma头域
Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝,最常用的是Pragma:no-cache。在HTTP/1.1协议中,它的含义和Cache-Control:no-cache相同。
Cache-Control头域
Cache-Control指定请求和响应遵循的缓存机制。
请求时的缓存指令包括no-cache、no -store、max-age、max-stale、min-fresh、only-if-cached,
响应消息中的指令包括public、 private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、 max-age。
各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存
no-store用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
Location响应头
Location响应头用于重定向接收者到一个新URI地址。
Server响应头
Server响应头包含处理请求的原始服务器的软件信息。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。
实体
请求消息和响应消息都可以包含实体信息,实体信息一般由实体头域和实体组成。实体头域包含关于实体的原信息,
实体头包括Allow、Content- Base、Content-Encoding、Content-Language、Content-Length、Content-Location、 Content-MD5、Content-Range、Content-Type、Etag、Expires、Last-Modified、 extension-header。
extension-header允许客户端定义新的实体头,但是这些域可能无法未接受方识别。
实体可以是一个经过编码的字节流,它的编码方式由Content-Encoding或Content-Type定义,它的长度由Content-Length或Content -Range定义。

Content-Type实体头用于向接收方指示实体的介质类型,指定HEAD方法送到接收方的实体介质类型,或GET方法发送的请求介质类型Content-Range实体头
Content-Range实体头用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-legth
         例如,传送头500个字节次字段的形式:
         Content-Range:bytes0-499/1234如果一个http消息包含此节(例如,对范围请求的响应或对一系列范围的重叠请求),Content-Range表示传送的范围,Content-Length表示实际传送的字节数。
Last-modified实体头
Last-modified实体头指定服务器上保存内容的最后修订时间。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/6219/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2023-5-30 17:02
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]