免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 9184 | 回复: 9
打印 上一主题 下一主题

怎么在LWP中使用cookie [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-21 11:02 |只看该作者 |倒序浏览
  1. #!/usr/bin/perl
  2. use strict;
  3. use LWP::UserAgent;
  4. use HTTP::Cookies;

  5. my $ua=new LWP::UserAgent;
  6. $ua->agent("perl_client/1.0 (perl $],libwww-perl-$LWP::VERSION,$^O)");
  7. my $home_url="http://h50237.www5.hp.com/iportal/commonlogin/default.aspx?returnurl=http%253a%252f%252fh50237.www5.hp.com%252fpartnerportal%252fhomepage.aspx";

  8. my $request=HTTP::Request->new(GET=>"$home_url");
  9. my $cookie_jar=HTTP::Cookies->new(file =>"/root/hello",autosave => 1);
  10. $ua->cookie_jar($cookie_jar);
  11. my $response=$ua->request($request);
  12. if($response->is_success){
  13.         print $response->content;
  14. }
复制代码


下面是我有ethereal得到的结果



  1. GET /iportal/commonlogin/default.aspx?returnurl=http%253a%252f%252fh50237.www5.hp.com%252fpartnerportal%252fhomepage.aspx HTTP/1.1

  2. TE: deflate,gzip;q=0.3

  3. Connection: TE, close

  4. Host: h50237.www5.hp.com

  5. User-Agent: perl_client/1.0 (perl 5.008008,libwww-perl-5.805,linux)



  6. HTTP/1.1 200 OK

  7. Cache-Control: private

  8. Content-Length: 59070

  9. Content-Type: text/html; charset=utf-8

  10. Server: Microsoft-IIS/6.0

  11. X-Powered-By: ASP.NET

  12. X-AspNet-Version: 1.1.4322

  13. Set-Cookie: ASP.NET_SessionId=43mnek55h4zuzuzb2mqxpdz0; path=/

  14. Set-Cookie: BB33E7B3-1433-453C-BB5D-55322BA46924=C0217A41-0918-4C51-B7C7-26FF2953560E=f6171fe3-23bf-452f-a067-29d9f37ea4bd; domain=hp.com; path=/

  15. Date: Thu, 21 Dec 2006 02:36:19 GMT
复制代码


可是在
文件hello是并没有设置cookie的内容
[root@supersun ~]# cat hello
#LWP-Cookies-1.0
不知道错在哪,xdjm们帮帮忙,谢谢!

[ 本帖最后由 coldrainsunc 于 2006-12-21 11:07 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-12-21 11:37 |只看该作者
应该是response在set cookie的时候没有设置expires,所以自动清空了,


所以cookie文件不会保存内容滴

论坛徽章:
0
3 [报告]
发表于 2006-12-21 11:42 |只看该作者
那有什么办法将cookie保存下来或者在下一个请求中使用呢

论坛徽章:
0
4 [报告]
发表于 2006-12-21 11:55 |只看该作者
只是没有存到文件里面而已, 你的ua继续去request还是有cookie的

论坛徽章:
0
5 [报告]
发表于 2006-12-21 11:57 |只看该作者
你不信的话,可以
use Data:umper;
print Dumper($ua);

可以看到你的$ua里面的cookie jar还是有内容的。

论坛徽章:
0
6 [报告]
发表于 2006-12-21 12:01 |只看该作者
谢谢,我试试看!

论坛徽章:
0
7 [报告]
发表于 2006-12-21 13:13 |只看该作者
据我的使用发现,cookie_jar不会保存PHPSESSIONID,就这原因,曾经害我抓包分析好几个小时,我现在都直接从头部手工分离cookie用

论坛徽章:
0
8 [报告]
发表于 2006-12-21 13:23 |只看该作者
原帖由 xiaoshengcaicai 于 2006-12-21 11:57 发表
你不信的话,可以
use Data:umper;
print Dumper($ua);

可以看到你的$ua里面的cookie jar还是有内容的。


是在里面,只是没保存到文件中去,还是从HTTP头分离比较爽

论坛徽章:
0
9 [报告]
发表于 2006-12-21 22:36 |只看该作者
呵呵,刚才阅读了一下HTTP::Cookies 源码

在把cookie内容当作string 输出的时候,有这样的代码

  1. my($version,$key,$val,$path,$domain,$port,
  2.            $path_spec,$secure,$expires,$discard,$rest) = @_;
  3.         return if $discard && $skip_discard;
复制代码


return if $discard && $skip_discard 这里面$skip_discard这个参数是new一个cookie jar的时候传进来的

那么就是说,如果我们这样new一个cookie jar,那么内容是肯定会保存到文件的:


  1. my $cookie_jar=HTTP::Cookies->new(file =>"d:/a.txt",autosave => 1, ignore_discard => 1);
复制代码



大伙可以试试


楼主如果硬要把cookie写到文件上,不妨试试 多加一个参数ignore_discard => 1

[ 本帖最后由 xiaoshengcaicai 于 2006-12-21 22:38 编辑 ]

论坛徽章:
0
10 [报告]
发表于 2006-12-22 11:11 |只看该作者
嗯,加上了ignore_discard => 1确实是将cookie写到文件中了!
谢谢xiaoshengcaicai兄!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP