【发布时间】:2011-04-05 05:29:49
【问题描述】:
我使用 WWW::Mechanize::Shell 来测试东西。 由于我没有成功登录我想抓取的网站,我想我会使用带有“cookie”命令 WWW::Mechanize::Shell 的特定网站的浏览器 cookie(chrome 或 firefox)。
问题是,Cookies 通常存储在单个文件中,这样不好,如何获取仅针对特定站点的 cookie?
谢谢,
【问题讨论】:
我使用 WWW::Mechanize::Shell 来测试东西。 由于我没有成功登录我想抓取的网站,我想我会使用带有“cookie”命令 WWW::Mechanize::Shell 的特定网站的浏览器 cookie(chrome 或 firefox)。
问题是,Cookies 通常存储在单个文件中,这样不好,如何获取仅针对特定站点的 cookie?
谢谢,
【问题讨论】:
为什么在文件中存储 cookie 不好?
由于WWW::Mechanize 是在LWP::UserAgent 之上构建的,因此您可以像在LWP::UserAgent 中一样处理cookie。您可以将 cookie jar 设为文件或内存中的哈希。
如果您不想将 cookie 保存在文件中,请在构造 mech 对象时使用空哈希引用:
use WWW::Mechanize;
my $mech = WWW::Mechanize->new( cookie_jar => {} );
如果要使用新文件,请创建一个新的HTTP::Cookies 对象:
use WWW::Mechanize;
my $mech = WWW::Mechanize->new(
cookie_jar => HTTP::Cookies->new( file => "$ENV{HOME}/.cookies.txt" )
);
如果您想加载特定于浏览器的 cookie 文件,请使用正确的模块:
use WWW::Mechanize;
my $mech = WWW::Mechanize->new(
cookie_jar => HTTP::Cookies::Netscape->new( file => $filename )
);
如果您根本不需要 cookie,请明确使用 undef:
use WWW::Mechanize;
my $mech = WWW::Mechanize->new( cookie_jar => undef );
所有这些都在文档中。
【讨论】:
HTTP::Cookies::Netscape, HTTP::Cookies::Microsoft 加载您现有的浏览器 cookie。
【讨论】: