HTTP::Cookies 至 Mojo::UserAgent::CookieJar
HTTP::Cookies to Mojo::UserAgent::CookieJar
我有 $cookie_jar
是使用 HTTP::Cookies:
创建的
$cookie_jar = HTTP::Cookies->new(
file => "my$path/my_cookies.dat",
autosave => 1,
);
我想通过 Mojo::UserAgent 使用此 $cookie_jar
但没有找到选项,我看到的唯一选项是解析原始字符串:
my $cookies = $cookie->parse($str);
它们不是兼容的对象,只有 HTTP::Cookies 才能读取它创建的文件。您需要使用 Mojo::UserAgent::CookieJar with Mojo::UserAgent. Note that it will create one by default, accessed via $ua->cookie_jar. It does not have file serialization support, but the Persistent role 才能添加此功能——但是它仍然不会读取 HTTP::Cookies 格式。
我已经上传了一个新版本 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
方式读取您的格式,但改为填充 Mojo::CookieJar
。没那么难(我写过好几篇这样的东西,其中一些在 CPAN 上)。
HTTP::Cookies
也有 as_string
方法,它使 multi-line 字符串每个字符串有一个 cookie。您可以使用这些行来输入 Mojo::Cookie
到 re-parse,但这对我来说没有吸引力。
我有 $cookie_jar
是使用 HTTP::Cookies:
$cookie_jar = HTTP::Cookies->new(
file => "my$path/my_cookies.dat",
autosave => 1,
);
我想通过 Mojo::UserAgent 使用此 $cookie_jar
但没有找到选项,我看到的唯一选项是解析原始字符串:
my $cookies = $cookie->parse($str);
它们不是兼容的对象,只有 HTTP::Cookies 才能读取它创建的文件。您需要使用 Mojo::UserAgent::CookieJar with Mojo::UserAgent. Note that it will create one by default, accessed via $ua->cookie_jar. It does not have file serialization support, but the Persistent role 才能添加此功能——但是它仍然不会读取 HTTP::Cookies 格式。
我已经上传了一个新版本 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
方式读取您的格式,但改为填充 Mojo::CookieJar
。没那么难(我写过好几篇这样的东西,其中一些在 CPAN 上)。
HTTP::Cookies
也有 as_string
方法,它使 multi-line 字符串每个字符串有一个 cookie。您可以使用这些行来输入 Mojo::Cookie
到 re-parse,但这对我来说没有吸引力。