我有$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);
我有$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);
我上传了一个新版本的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
重新解析它们,但这对我来说并不那么吸引人。
它们不是兼容的对象,除了 HTTP::Cookies 之外没有任何东西可以读取它创建的文件。您需要将Mojo::UserAgent::CookieJar与 Mojo::UserAgent 一起使用。请注意,它会默认创建一个,通过 $ua->cookie_jar 访问。它不支持文件序列化,但是Persistent 角色可以添加这个功能——但是它仍然不会读取 HTTP::Cookies 格式。