1

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

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

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

これが私のコードです:

いくつかの場所での変数宣言で「my」が欠落していることをお許しください。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)=@_;
if($title_flag)
{
    $title.=$text;
}
}

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

sub end{
my($self,$tag,$origtext)=@_;
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::Parser クラスを使用して、HTTP 応答 HTML ページを解析しています。タグ間の値を読み取るために、HTML::Parser の start、text、および end のメソッドをオーバーライドしています。

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

ありがとう。

4

3 に答える 3

1

これは HTTP::Cookies::set_cookie のソース コードです。

サブ set_cookie
{
    私の $self = シフト;
    私の($バージョン、
       $key、$val、$path、$domain、$port、
       $path_spec、$secure、$maxage、$discard、$rest) = @_;

    # パスとキーを空にすることはできません (キーを '$' で開始することはできません)
    !defined($path) || の場合は $self を返します。$path !~ m,^/, ||
                !定義済み($キー) || $key =~ m,^\$,;

    # 正当なポートを確保する
    if (定義された $port) {
    $port =~ /^_?\d+(?:,\d+)*$/; でない限り、$self を返します。
    }   

Cookie を cookie_jar に設定したい場合は、''' ''' の代わりに配列を渡す必要があるようです。key=valueまたは
、LWP::UserAgent::default_header を使用してリクエスト Cookie を設定することもできます。
HTTP Cookie は

于 2013-01-19T06:40:04.877 に答える
0

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

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

于 2011-10-27T12:30:29.280 に答える
-1

この種のタスクには、WWW::Mechanizeモジュールを好みます。

于 2011-10-25T18:44:59.053 に答える