首页 > 解决方案 > HTTP::Cookies 到 Mojo::UserAgent::CookieJar

问题描述

我有$cookie_jar使用HTTP::Cookies创建的:

$cookie_jar = HTTP::Cookies->new(
  file => "my$path/my_cookies.dat",
  autosave => 1,
);

我想$cookie_jar使用Mojo::UserAgent使用它,但没有找到选项,我看到的唯一选项是解析原始字符串:

my $cookies = $cookie->parse($str);

标签: perlcookieslwp-useragentmojo-useragent

解决方案


我上传了一个新版本的HTTP::Cookies::Mozilla,它包含一个解决这个问题的示例程序。


加载您的数据,然后通过回调HTTP::Cookie调用将其转换为您喜欢的任何格式:scan

$cookie_jar = HTTP::Cookies->new(
  file => "my$path/my_cookies.dat",
  autosave => 1,
);
$cookie_jar->scan( \&callback )

在该回调中,将其转换为Mojo::Cookie::Response对象:

{
my $jar = Mojo::UserAgent::CookieJar->new

# access the scoped variable after you've run all the callbacks.
sub jar { $jar }

sub callback {
    my( $version, $key, $val, $path, $domain, $port, 
        $path_spec, $secure, $expires, $discard, $hash ) = @_;

    my $cookie = Mojo::Cookie::Response->new;
    ...fill in data...

    $jar->add( $mojo_cookie);
    )
}

或者,编写一个子类,以HTTP::Cookies这种方式读取您的格式,HTTP::Cookies但改为填充 a Mojo::CookieJar。这并不难(我已经写了几篇这样的东西,其中一些在 CPAN 上)。

HTTP::Cookies还有as_string一种方法可以制作一个多行字符串,每个字符串一个 cookie。您可以使用这些行来Mojo::Cookie重新解析它们,但这对我来说并不那么吸引人。


推荐阅读