【问题标题】:WWW::Mechanize and CookiesWWW::Mechanize 和 Cookie
【发布时间】:2011-04-05 05:29:49
【问题描述】:

我使用 WWW::Mechanize::Shell 来测试东西。 由于我没有成功登录我想抓取的网站,我想我会使用带有“cookie”命令 WWW::Mechanize::Shell 的特定网站的浏览器 cookie(chrome 或 firefox)。

问题是,Cookies 通常存储在单个文件中,这样不好,如何获取仅针对特定站点的 cookie?

谢谢,

【问题讨论】:

    标签: perl cookies mechanize


    【解决方案1】:

    为什么在文件中存储 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 );
    

    所有这些都在文档中。

    【讨论】:

    • 这是一个很好的解释,真的很有帮助。但是,实际上我想要的是加载我已经拥有的 cookie,这些 cookie 位于 Firefox cookie 文件中(不知道它在哪里......)。有可能吗?
    • 好吧,使用 HTTP::Cookie::* 模块之一来处理您要加载的 cookie 文件的类型。
    【解决方案2】:

    HTTP::Cookies::Netscape, HTTP::Cookies::Microsoft 加载您现有的浏览器 cookie。

    【讨论】:

      猜你喜欢
      • 2011-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 2011-12-14
      • 1970-01-01
      相关资源
      最近更新 更多