Linux curl命令http cookie详解
Http Cookie在Http协议中是非常实用的功能、可以保留网站的一些会话信息,方便用户下次再次来到本网站时使用;如在cookie中记录用户的性别和姓氏、下次用户再次到来,即使未登录,也可以根据获取到的cookie显示“欢迎X先生/女士再次光临本站”类似的欢迎标语;也可以在cookie中记录用户的用户名,下次用户登陆时就不在需要输入用户名,提高便捷度。
一、Linux curl命令Cookie的接收:
1、cookie接收原理:
在介绍接收cookie之前,先来看看cookie是从http 服务器怎么发送过来的。我们先在站点根目录下写一个写cookie的脚本“test.php”,内容一下:<?php // 性别: 2(女);有效期1年后;只对aiezu.com有效 setcookie("sex", 2, time()+3600*24*365, '', 'aiezu.com'); // 姓氏: 刘;有效期1年后;只对aiezu.com有效 setcookie("surname", '刘', time()+3600*24*365, '', 'aiezu.com');然后运行“curl -I http://aiezu.com/test.php”命令,看到的http响应头如下: 可以看出,http协议是通过http头将cookie信息发送给浏览器的,其中汉字是经过URL Encode的。
2、linux curl命令接收cookie(-c):
curl命令可以使用"-c"或者"--cookie-jar"选项将http服务器发送过来的cookie保存到指定文件或者输出;更多的linux curl命令参数介绍请参考:Linux curl命令详解页面介绍;这里我们将cookie保存到"cookie.txt"文件。[root@aiezu.com ~]# curl --cookie-jar cookie.txt http://aiezu.com/test.php [root@aiezu.com ~]# cat cookie.txt # Netscape HTTP Cookie File # http://curl.haxx.se/docs/http-cookies.html # This file was generated by libcurl! Edit at your own risk. .aiezu.com TRUE / FALSE 1512612268 sex 2 .aiezu.com TRUE / FALSE 1512612268 surname %E5%88%98
二、Linux curl命令发送Cookie:
1、cookie发送原理和从cookie文件中发送:
在介绍发送cookie之前,这次来看看cookie是怎么发送到http 服务器的。先将站点根目录下的"test.php"改成如下,内容就简单的一行,用于输出http服务器接收到的cookie数组内容:<?php print_r($_COOKIE);然后使用linux curl命令的"-b"参数,发送我们在第一步保存到文件的cookie,再加一个“-v”参数来显示详细信息:
[root@aiezu.com ~]# curl -b @cookie.txt http://aiezu.com/test.php -v * About to connect() to aiezu.com port 80 (#0) * Trying 120.26.62.49... * Connected to aiezu.com (120.26.62.49) port 80 (#0) > GET /test.php HTTP/1.1 > User-Agent: curl/7.29.0 > Host: aiezu.com > Accept: */* > Cookie: surname=%E5%88%98; sex=2 > < HTTP/1.1 200 OK < Date: Wed, 07 Dec 2016 02:33:28 GMT < Server: Apache < Cache-Control: max-age=315360000 < Expires: Sat, 05 Dec 2026 02:33:28 GMT < Vary: Accept-Encoding < Content-Length: 46 < Content-Type: text/html; charset=utf-8 < Array ( [surname] => 刘 [sex] => 2 ) * Connection #0 to host aiezu.com left intact在上面信息第9行http请求头中看到了我们发送cookie的key/value,可见cookie是通过http请求头发送到http服务器的。那为什么只发送key/value,没有发送有效时间和有效域名呢?因为时间、域名判断cookie是否发送的判断条件,只有当某一条cookie属于此域名、并且cookie还在有效时间内,此条cookie才会发送;判断完后,时间和域名就没发送的必要了。
2、linux curl命令使用"-b"、"--cookie"参数直接发送cookiekey/value对:
linux curl命令可以使用"-c"或者“--cookie”参数直接发送cookie键值对,两个参数的意义相同:[root@aiezu.com ~]# curl -b "uid=999;sex=2" http://aiezu.com/test.php Array ( [uid] => 999 [sex] => 2 )
3、linux curl命令使用"-H"参数发送cookie:
既然cookie是通过http请求头发送的,当然可以使用"-H"参数来为http请求头添加cookie键值来发送cookie:[root@aiezu.com ~]# curl -H "Cookie: uid=999;sex=2" --cookie a=9 http://aiezu.com/test.php Array ( [uid] => 999 [sex] => 2 )