2

私が苦労しているのは、LWP::UserAgent がアクセサを提供しないため、Cookie の名前を指定することで、cookie_jar 内の Cookie について知りたいことをすべて取得できるからです。cookie_jar に scan() メソッドがあることはわかっていますが、非常に基本的なものにコールバックを提供するには、多くのオーバーヘッドがあるようです。これは私が今持っているものです:

#!/usr/bin/env perl

use strict;
use warnings;

use Data::Dump qw (dump);
use WWW::Mechanize;

my $mech = WWW::Mechanize->new;
$mech->get( 'http://www.nytimes.com' );

my %cookies = (); 
$mech->cookie_jar->scan( \&check_cookies );

dump \%cookies;

sub check_cookies {
    my @args = @_; 
    $cookies{ $args[1] } = { 
        version   => $args[0],
        val       => $args[2],
        path      => $args[3],
        domain    => $args[4],
        port      => $args[5],
        path_spec => $args[6],
        secure    => $args[7],
        expires   => $args[8],
        discard   => $args[9],
        hash      => $args[10],
    };  
} 

スクリプトの出力は次のようになります。

{   adxcs => {
        discard   => 1,
        domain    => ".nytimes.com",
        expires   => undef,
        hash      => {},
        path      => "/", 
        path_spec => 1,
        port      => undef,
        secure    => undef,
        val       => "-", 
        version   => 0,
    },       
    RMID => {
        discard   => undef,
        domain    => ".nytimes.com",
        expires   => 1374340257,
        hash      => {},
        path      => "/", 
        path_spec => 1,
        port      => undef,
        secure    => undef,
        val       => "02b4bc821c00500991212ba2",
        version   => 0,
    },       
}

そのため、名前で Cookie に簡単にアクセスできますが、これを行う簡単な方法があるかどうか、または私が知らない便利なモジュールがあるかどうか疑問に思っていました。

4

1 に答える 1

0
$cookies->scan(sub  
{ 
  if ($_[1] eq $name) 
  { 
    print "$_[1] @ $_[4] = $_[2]\n"; 
  }; 
}); 

出力は、たとえば次のようになります。

sessionID @ www.nytimes.com = 1234567890

編集: >>

sub getCookieValue
{
  my $cookies = $_[0];
  my $name = $_[1];
  my $result = null;
  $cookies->scan(sub  
  {  
    if ($_[1] eq $name) 
    { 
      $result = $_[2];
    }; 
  });
  return $result;
}

次のように使用します。

print getCookieValue($cokies, 'sessionID');
于 2012-07-20T17:46:07.870 に答える