在Perl中使用HTTP::Cookie传递Cookie值

在Perl中使用HTTP::Cookie传递Cookie值,perl,session-cookies,lwp-useragent,html-parser,Perl,Session Cookies,Lwp Useragent,Html Parser,我需要登录到一个站点,解析HTML页面并提取特定HTML标记之间的值 我能够在一个不需要登录数据的页面上成功地做到这一点。我正在使用HTML::Parser类 UserAgent提供了cookie\u jar方法,通过从文件加载cookie来设置cookie。但是,我想在脚本本身中对cookie值进行harcode。可能吗?我在网上找不到任何有效的例子 这是我的密码: 请原谅在一些地方变量声明中缺少“my”。为了理解LWP::UserAgent中Cookie处理的概念,我匆忙编写了这段代码 #!

我需要登录到一个站点,解析HTML页面并提取特定HTML标记之间的值

我能够在一个不需要登录数据的页面上成功地做到这一点。我正在使用HTML::Parser类

UserAgent提供了cookie\u jar方法,通过从文件加载cookie来设置cookie。但是,我想在脚本本身中对cookie值进行harcode。可能吗?我在网上找不到任何有效的例子

这是我的密码:

请原谅在一些地方变量声明中缺少“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,尽管我自己还没有尝试过。但我想知道我们是否也能这样做


谢谢。

对于此类任务,我更喜欢模块。

只需从类中设置HTTP
Cookie


你的解析代码看起来很痛苦。对于声明性方法,请使用或。

这是HTTP::Cookies::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+)*$/; } 子集合 { 我的$self=shift; 我的版本, $key、$val、$path、$domain、$port、, $path_spec、$secure、$maxage、$discard、$rest)=@; #路径和键不能为空(键不能以“$”开头) 返回$self if!defined($path)| |$path!~m,^/,|| !已定义($key)| |$key=~m,^\$,; #确保合法港口 如果(定义为$port){ 返回$self,除非$port=~/^\d+(?:,\d+)*$/; } 似乎如果要将cookie设置到cookie_jar,则必须传递数组,而不是“'
key=value

或者您也可以使用LWP::UserAgent::default_头来设置请求cookies。

由于HTTP Cookie是

的一部分,请提供一个如何执行此任务的示例。