2011-10-25 26 views
1

我需要登錄到網站,解析HTML頁面並提取特定HTML標記之間的值。在Perl中使用HTTP :: Cookie傳遞Cookie值

我能夠在不需要登錄數據的頁面上成功完成此操作。我正在使用HTML :: Parser類。

LWP :: UserAgent提供了cookie_jar方法,通過從文件加載cookie來設置cookie。不過,我想在腳本本身中對cookie值進行編碼。那可能嗎?我在網上找不到任何工作示例。

這裏是我的代碼:

請原諒失蹤「我」在一些地方變量聲明。我急着寫這段代碼,試圖理解LWP :: UserAgent中的Cookie處理的概念。

#!/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"; 

摘要:

我使用的HTML解析器::類解析HTTP響應HTML頁面。爲了讀取標籤之間的值,我重寫了HTML :: Parser的方法,開始,文本和結尾。

Cookie值以Key和Value形式傳遞。我知道,雖然我沒有自己嘗試過,但可以從文本文件加載cookie。但我想知道我們是否也可以這樣做。

謝謝。

回答

-1

對於這類任務,我更喜歡WWW::Mechanize模塊。

+0

請提供關於如何執行此任務的示例。 –

0

這是HTTP ::餅乾的源代碼:: 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+)*$/; 
    } 

看來,如果你想設置cookie來cookie_jar一樣,你必須傳遞數組,而不是「」「key=value」 ''
或者您也可以使用LWP :: UserAgent :: default_header來設置請求Cookie。
因爲HTTP cookie是

的一部分