• HOME
  • DOCS
  • WTF
  • TECH
  • LIFE
  • PAGES
    • ARCHIVE
    • TAGS
    • ABOUT
    • FRIENDS
    • RSS
  • TOOLS
    • GEO
    • RANDOM()
    • GOO.GL
    • CSS HEART
Aj's Blog

记录时间溜走的瞬间和折腾过的那些事

Perl: 如何用LWP::UserAgent发起一个自定义HTTP::Headers的请求
2010-12-26 @ TECH

首先,参考ActivePerl User Guide的几个HTTP类和子类。

HTTP::Headers、HTTP::Cookies、HTTP::Request、HTTP::Response、HTTP::Status。

HTTP::Headers官方示例

require HTTP::Headers;
$h = HTTP::Headers->new;
#设置一个HTTP头
$h->header('Content-Type' => 'text/plain');

#读取一个HTTP头的值
$ct = $h->header('Content-Type');

#删除一个HTTP头的值
$h->remove_header('Content-Type');

HTTP::Request官方示例

#独立HTTP::Request方式
require HTTP::Request;
$request = HTTP::Request->new(GET => "URL");

#LWP::UserAgent方式
$ua = LWP::UserAgent->new;
$response = $ua->request($request);

HTTP::Cookies官方示例

#制定cookies存储位置并自动保存
use HTTP::Cookies;
$cookie_jar = HTTP::Cookies->new(file => "$ENV{'HOME'}/lwp_cookies.dat", autosave => 1);

#新建一个HTTP::UserAgent并绑定cookies设置
use LWP;
$ua = LWP::UserAgent->new;
$ua->cookie_jar($cookie_jar);

#为HTTP::Request添加Cookies头
$cookie_jar->add_cookie_header( $request )

下面参考一个实例:

use LWP::UserAgent;
####G(URL,UserAgent,Refer) 返回HTTP::Response####
sub G{
#第一步:新建LWP::UserAgent对象
$useragent = LWP::UserAgent->new();

#第二步:自定义一个HTTP::Header结构的哈希
@header = ("Accept" => "*/*",
        "Referer" => "Refer参数",
        "Accept-Language" => "en-us",
        "User-Agent" => "UserAgent参数",
        "Connection" => "Close"
    );

#第三步:新建HTTP::Request对象
$request = HTTP::Request->new(GET=>"URL参数");

#第四步:给HTTP::Request对象添加自定义的HTTP::Header对象
$request->header(@header);

#第五步:取得返回值(HTTP::Reponse对象)并作为返回值
$response = $useragent->request($request); }

如何提取Cookies

$cookie_jar = HTTP::Cookies->new();
#参考上例
$cookie_jar->extract_cookies("HTTP::Response对象");

关于HTTP 302、404等

use HTTP::Status qw(:constants :is status_message);
if ($rc != HTTP_OK) {print status_message($rc), "\n";}
if (is_success($rc)) { ... }
if (is_error($rc)) { ... }
if (is_redirect($rc)) { ... }

更多资料请参考Perl安装目录下ActivePerl User Guide手册。

下一篇:   Perl: LPW::UserAgent的TE头如何删除
上一篇:   JS: showModelessDialog和showModalDialog的区别
暂无评论

Cancel reply