2

このコードのようにMojoのファイルからCookieをロードする方法:

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

if (-e "cookie.txt") {
    print q[Cookie file: cookie.txt found!\n];

    $mech->cookie_jar(HTTP::Cookies->new(
        file => q[cookie.txt],
    ));

    $mech->get(qq[$cfg->{'url'}/login]) or die qq[invalid request\n];
} else {
    print q[Cookie file: cookie.txt NOT found!\n];

    $mech->get(qq[$cfg->{'url'}/login]) or die qq[invalid request\n];

    $mech->submit_form(
        form_name => 'login',
        fields => {
            'email'     => $cfg->{'email'},
            'password'  => $cfg->{'password'},
        },
    );
    die qq[ERROR: Failed to login!\n] unless ($mech->success);

    $mech->cookie_jar->save("cookie.txt");
}

cookie.txtがない限り、スクリプトはユーザー名とパスワードを使用し、結果のCookieはファイルcookie.txtに保存され、次回はこのファイルを使用します。

Mechanizeを使用せずにこのコードを書き直そうとしていますが、Cookieファイルの保存と読み込みに問題があります。

my $ua = Mojo::UserAgent->new;
$ua->cookie_jar(Mojo::CookieJar->new);
and then I do not know how to continue :)

PS私の英語とperlでごめんなさい:)

4

1 に答える 1

2

私が知っているように、Mojoliciousはこの機能をサポートしていませんが、次のようにStorableモジュールの保存および取得機能を使用できます。

use Mojo::Base -strict;

# uncomment to be sure
#BEGIN { $ENV{MOJO_USERAGENT_DEBUG} = 1; }

use Mojo::UserAgent;
use Storable;

my $cookie_path = 'my.cookie';
my $req_str     = 'http://www.google.com/';


SAVE: {
  my $ua1 = Mojo::UserAgent->new;
  $ua1->get($req_str);
  store $ua1->cookie_jar, $cookie_path;
}

my $ua2 = Mojo::UserAgent->new;

# load
$ua2->cookie_jar(retrieve($cookie_path));

# make a request with loaded cookie
$ua2->get($req_str);
于 2013-01-30T00:07:49.040 に答える