【问题标题】:Perl LWP: Send Cookie by HTTP header not workPerl LWP:通过 HTTP 标头发送 Cookie 不起作用
【发布时间】:2013-02-12 14:39:12
【问题描述】:

我知道如果你想使用cookie,你必须编写代码为:

$ua = LWP::UserAgent->new();
$ua->cookie_jar(HTTP::Cookies->new());

然后就可以get()、post()等等。

但如果我只是将 cookie 字符串放入 HTTP HEADER 和 get(),我无法得到正确的响应。如:

$ua = LWP::UserAgent->new();
$ua->get($url, 'Cookie' => $cookie_string);

【问题讨论】:

    标签: perl cookies lwp


    【解决方案1】:

    我想你会发现Cookie 标头是使用该方法正确设置的。

    为了确定,你可以写

    my $resp = $ua->get('http://www.myurl.com', Cookie => 'my=data');
    
    print $resp->request->as_string;
    

    您应该会看到请求包含该行

    Cookie: my=data
    

    【讨论】:

      【解决方案2】:

      从文档看来,$ua->cookie_jar() 需要一个哈希值,用于指定选项或提供存储 cookie 的数据结构。我会尝试

      $ua->cookie_jar({});
      

      另外,请注意,您尝试使用的方法只会将 cookie 存储在内存中,因此一旦您的脚本结束,您对所述 cookie 的了解也会随之消失。你可能想看看

      http://metacpan.org/pod/HTTP::Cookies

      http://www.perl.com/pub/2002/08/20/perlandlwp.html

      有关内存中 cookie jar 和基于文件的 cookie jar 的示例。

      至于为什么 HTTP::Cookie 在以您的方式调用时不会返回合适的哈希值,我不确定,但似乎不是。

      【讨论】:

      • cookie_jar 方法需要一个对象作为其参数。您通常会传递HTTP::Cookies 的实例,但任何提供必要方法的对象都可以。作为捷径,您可以传递一个空的匿名哈希,此时LWP::UserAgent 将为您创建一个HTTP::Cookies 对象。 OP 似乎想要的是在请求中传递一个特定的 Cookie 标头。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 2015-06-07
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 2019-07-25
      • 1970-01-01
      相关资源
      最近更新 更多