2011-10-25 4 views
1

サイトにログインし、HTMLページを解析して特定のHTMLタグの間の値を抽出する必要があります。PerlでHTTP :: Cookieを使用してCookie値を渡す

これは、ログインデータを必要としないページで正常に実行できます。私はHTML :: Parserクラスを使用しています。

LWP :: UserAgentはcookie_jarメソッドを提供し、ファイルからクッキーをロードしてクッキーを設定します。しかし、私はスクリプト自体のクッキー値をharcodeしたい。それは可能ですか?私はネット上で実際の例を見つけることができませんでした。ここで

は私のコードです:

いくつかの場所で行方不明の変数の宣言に「を私の」言い訳してください。私は急いでこのコードを書いて、LWP :: UserAgentのCookie Handlingのコンセプトを理解しようとしました。

#!/usr/bin/perl 

use strict; 
use warnings; 
use HTTP::Request::Common; 
use LWP::UserAgent; 
use HTTP::Response; 
use HTTP::Cookies; 

package IdentityParse; 
use base "HTML::Parser"; 

my $title_flag=0; 
my $title=""; 

my $cookie_jar= HTTP::Cookies->new; 
$cookie_jar->clear; 
$cookie_jar->set_cookie(Name=Value); #Example, PHPSESSID=710c7aa60aa5cacdc40028ef79de24b2 

sub text{ 
my($self,$text)[email protected]_; 
if($title_flag) 
{ 
    $title.=$text; 
} 
} 

sub start{ 
my($self,$tag,$attr,$attrseq,$origtext)[email protected]_; 
if($tag =~ /^title$/i) 
{ 
    $title_flag=1; 
} 
} 

sub end{ 
my($self,$tag,$origtext)[email protected]_; 
if($tag =~ /^title$/i) 
{ 
    $title_flag=0; 
} 
} 

my $url="http://sitename.com/users/index.php"; 

my $ua= LWP::UserAgent->new(); 
$ua->agent('NeonFlash'); 
$ua->timeout(30); 
$ua->cookie_jar($cookie_jar); 

my $req= HTTP::Request->new(GET => $url); 
my $res= ($ua->request($req))->content; 

my $p = new IdentityParse; 
$p->parse($res); 

$p->eof; 

print "The title of the web page is: ".$title."\n"; 

概要:

私はHTTPレスポンスのHTMLページを解析するためにHTML :: Parserクラスを使用しています。タグ間の値を読み取るために、HTML :: Parserのメソッド、開始、テキスト、および終了をオーバーライドします。

Cookieの値がKeyとValueの形式で渡されています。テキストファイルからクッキーを読み込むことは可能ですが、自分で試したことはありません。しかし、私たちがこのようにすることができるかどうかを知りたい。

ありがとうございました。

答えて

-1

この種のタスクでは、私はWWW::Mechanizeモジュールを優先します。

+0

このタスクについての例を示してください。 –

0

HTTP::RequestクラスのHTTP Cookieヘッダーを設定するだけです。

あなたの解析コードは、見るのが面倒です。宣言的なアプローチの場合は、Web::QueryまたはHTML::Queryを使用します。

0

これはHTTP ::クッキーのソースコードです::あなたがcookie_jarに設定されたCookieをしたい場合は、あなたの代わりに「」「key=value」の配列を渡すために持っているようset_cookie

 
sub set_cookie 
{ 
    my $self = shift; 
    my($version, 
     $key, $val, $path, $domain, $port, 
     $path_spec, $secure, $maxage, $discard, $rest) = @_; 

    # path and key can not be empty (key can't start with '$') 
    return $self if !defined($path) || $path !~ m,^/, || 
       !defined($key) || $key =~ m,^\$,; 

    # ensure legal port 
    if (defined $port) { 
    return $self unless $port =~ /^_?\d+(?:,\d+)*$/; 
    } 

らしいです''
また、LWP :: UserAgent :: default_headerを使用してリクエストクッキーを設定することもできます。
HTTP Cookieは

の一部です。
関連する問題