Как я могу напечатать значения cookie_jar в WWW :: Mechanize Perl? - PullRequest
4 голосов
/ 22 апреля 2010

Как мне распечатать значения установленного cookie / cookie_jar?

Попытка:

##my $cookie_jar=HTTP::Cookies->new(file => "cookie.jar",autosave=>1,ignore_discard=>1);
my $cookie_jar=HTTP::Cookies->new(); ## Would like it to be in memory
my $agent = WWW::Mechanize->new(cookie_jar => $cookie_jar);

##my $agent = WWW::Mechanize->new();
##my $agent = WWW::Mechanize->new(autocheck => 1);

##$agent->cookie_jar( {} );

# we need cookies
##$agent->cookie_jar(HTTP::Cookies->new);

print "Set Cookie Jar?\n";
print $agent->cookie_jar->as_string();
print "\n";

$agent->get($url); // url is a https site

Не слишком много удачи с чем-то из этого, что я делаю не так?

Ответы [ 3 ]

7 голосов
/ 22 апреля 2010

Ну, вы должны иметь несколько файлов cookie в банке для файлов cookie, чтобы увидеть любые файлы cookie в выходных данных. Пока у вас есть пустая банка с печеньем. Либо убедитесь, что вы добавили несколько файлов cookie, либо чтобы сайт, к которому вы обращаетесь, устанавливал их:

use HTTP::Cookies;
use WWW::Mechanize;

my $cookie_jar = HTTP::Cookies->new;
my $agent      = WWW::Mechanize->new( cookie_jar => $cookie_jar );

$cookie_jar->set_cookie(
    qw(
    3
    cat
    buster
    /
    .example.com
    0
    0
    0
    )
    );

    $agent->get( 'http://www.amazon.com' );

print "Set Cookie Jar?\n", $agent->cookie_jar->as_string, "\n";

Это дало мне вывод:

Set Cookie Jar?
Set-Cookie3: session-id=000-0000000-0000000; path="/"; domain=.amazon.com; path_spec; discard; version=0
Set-Cookie3: session-id-time=1272524400l; path="/"; domain=.amazon.com; path_spec; discard; version=0    Set-Cookie3: cat=buster; path="/"; domain=.example.com; port=0; version=3

Однако вам не нужно вызывать HTTP::Cookies напрямую. LWP позаботится об этом. Вы просто даете cookie_jar ссылку на хеш:

    my $agent      = WWW::Mechanize->new( cookie_jar => {} );

Если вы просто хотите, чтобы файлы cookie использовались в конкретном ответе, вы можете создать отдельный файл cookie, в котором будут храниться те файлы, которые вы извлекли из ответа:

use WWW::Mechanize;

my $agent = WWW::Mechanize->new( cookie_jar => {} );

my $response = $agent->get( 'http://www.amazon.com' );

my $cookie_jar = HTTP::Cookies->new;
$cookie_jar->extract_cookies( $response );

print $cookie_jar->as_string;
2 голосов
/ 24 мая 2012

Если вы ищете значение определенного файла cookie, вам нужно будет отсканировать весь файл cookie, используя метод HTTP :: Cookie's $ cookie_jar-> scan (\ & callback) .Например, чтобы получить файл cookie JSESSIONID с www.linkedin.com, вы можете использовать следующий код:

#!/usr/bin/perl

use strict;
use warnings;

use LWP::UserAgent;
use HTTP::Cookies::Netscape;

my $cookies = HTTP::Cookies::Netscape->new(
    hide_cookie2 => 1, 
    file => "$ENV{HOME}/.cookies.txt",
    autosave => 1
    );

my $browser = LWP::UserAgent->new(
    env_proxy => 1,
    autocheck => 1,
    cookie_jar => $cookies,
    agent => "get-jsessionid.pl/1.0"
    );

$browser->env_proxy();

my $response = $browser->get( 'http://www.linkedin.com' );
if ($response->is_success)
{
    $cookies->scan(sub 
                   {
                       if ($_[1] eq 'JSESSIONID')
                       {
                           print "$_[1] @ $_[4] = $_[2]\n";
                       };
                   }
        );
}
else
{
    die $response->status_line;
}

Вывод будет выглядеть примерно так:

JSESSIONID @ www.linkedin.com = "ajax: 11122233344455556667"

1 голос
/ 22 апреля 2010

Похоже, ваша главная проблема в том, что вы пытаетесь распечатать куки-файлы до того, как вы действительно посетите сайт. Попробуйте переместить свои печатные выписки после звонка на get()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...