Chinaunix

标题: LWP中文FAQ [仙子整理] [打印本页]

作者: 兰花仙子    时间: 2010-10-26 17:07
标题: LWP中文FAQ [仙子整理]
LWP中文FAQ
若有变动或补充仙子会即时更新


1. 如何快速GET一个页面?

  1.   use LWP::Simple;
  2.   my $doc = get 'http://www.example.com/';
复制代码



2. 标准的HTTP请求过程?

  1.   use LWP::UserAgent;

  2.   my $ua = LWP::UserAgent->new;
  3.   my $req = HTTP::Request->new(GET => 'http://www.example.com/');

  4.   my $res = $ua->request($req);

  5.   if ($res->is_success) {
  6.       print $res->as_string;
  7.   }else {
  8.       print "Failed: ", $res->status_line, "\n";
  9.   }
复制代码



3. 如何得到HTTP响应状态码?

  1.   print $res->status_line;
复制代码



4. 如何得到HTTP响应的完整内容?

  1.   print $res->as_string;
复制代码



5. 如何得到HTTP响应的HTML解码后的内容?

  1.    print $res->decoded_content;
复制代码



6. 如何POST数据?

  1.   use LWP::UserAgent;
  2.   my $ua = LWP::UserAgent->new;

  3.   my $req = HTTP::Request->new(POST => 'http://www.example.com/');
  4.   $req->content_type('application/x-www-form-urlencoded');
  5.   $req->content('key1=value1&key2=value2');

  6.   my $res = $ua->request($req);
  7.   print $res->as_string;
复制代码



7. 如何接受Cookie?

  1.   use LWP::UserAgent;
  2.   use HTTP::Cookies;

  3.   my $ua = LWP::UserAgent->new;
  4.   $ua->cookie_jar(HTTP::Cookies->new(file => "lwpcookies.txt",
  5.                                      autosave => 1));

  6.   my $req = HTTP::Request->new(GET => "http://www.example.com/");

  7.   my $res = $ua->request($req);
  8.   print $res->status_line;
复制代码



8. 如何在请求里发送指定的Cookie?

  1.   use LWP::UserAgent;
  2.   my $ua = LWP::UserAgent->new;

  3.   my $req = HTTP::Request->new(GET => 'http://www.example.com/');
  4.   $req->header('Cookie' => "key1=value1;key2=value2");

  5.   my $res = $ua->request($req);
  6.   print $res->status_line;
复制代码



9. 如何访问需要身份验证的网站(basic auth)?

  1.   use LWP::UserAgent;
  2.   my $ua = LWP::UserAgent->new;

  3.   my $req = HTTP::Request->new(GET => 'http://www.example.com/');
  4.   my $req->authorization_basic('user', 'password');

  5.   my $res = $ua->request($req);
  6.   print $res->as_string;
复制代码



10. 如何指定UserAgent的超时时间和版本?

  1.   my $ua = LWP::UserAgent->new;
  2.   $ua->timeout(5);
  3.   $ua->agent("Mozilla/8.0");
复制代码



11. 如何让UserAgent不follow重定向?

  1.   $ua->max_redirect(0);
复制代码


  参数表示跟随重定向的层数,0表示不跟随重定向。


12. 如果机器有多个IP,如何指定UserAgent使用哪个IP访问网络?

  1.   $ua->local_address('1.2.3.4');
复制代码



13. 直接使用IP访问网站,为什么会失败?

   那是因为没有加上Host头部,虚拟主机识别不出你的请求。
   在构造请求时,请加上Host头部:

  1.    my $req = HTTP::Request->new(GET => "1.2.3.4");
  2.     $req->header('Accept' => 'text/html',
  3.                  'Host' => 'www.example.com');
复制代码

作者: yybmsrs    时间: 2010-10-26 17:11

作者: 兰花仙子    时间: 2010-10-26 17:11
俺自己加个保留哈。。经验总结,可供借鉴。
作者: nuclearxin    时间: 2010-10-26 17:16
Addison.Wesley.Network.Programming.With.Perl

google这本书 perl的 sorcket http 之类的就明朗
作者: toniz    时间: 2010-10-26 17:18

作者: 黑色阳光_cu    时间: 2010-10-26 17:23
搞不懂LWP为什么不默认支持HTTP持续连接。
作者: zhlong8    时间: 2010-10-26 17:33
总结的很好啊,常用的都点到了。精华!!!
作者: doiob    时间: 2010-10-26 21:28

作者: wxlfh    时间: 2010-10-27 10:39
谢谢兰花儿。
作者: 我好象是马甲    时间: 2010-10-27 10:41
{:3_187:}
作者: skskevin    时间: 2010-10-28 11:12
总结的不错。
作者: 珞水的大叔    时间: 2010-10-28 16:51
很有用,呵呵
作者: ykredrum    时间: 2010-10-28 21:36
非常简练有用啊
太感谢了
先收藏了
作者: ykredrum    时间: 2010-10-29 01:02
  1.   use LWP::UserAgent;
  2.   my $ua = LWP::UserAgent->new;

  3.   my $req = HTTP::Request->new(POST => 'http://www.example.com/');
  4.   $req->content_type('application/x-www-form-urlencoded');
  5.   $req->content('key1=value1&key2=value2');

  6.   my $res = $ua->request($req);
  7.   print $res->as_string;
复制代码
LWP::UserAgent这个好像有自己的post方法,
为什么这里要另外使用my $req = HTTP::Request->new(POST => 'http://www.example.com/');

有什么特别的么?速度快点?还是其他什么特别的,谢谢
作者: 兰花仙子    时间: 2010-10-29 09:23
LWP::UserAgent这个好像有自己的post方法,
为什么这里要另外使用my $req = HTTP::Request->new(POST => ' ...
ykredrum 发表于 2010-10-29 01:02



    这是创建了一个POST请求目标。
LWP只是实现POST行为。
作者: Tiger_cn    时间: 2010-11-13 23:47
geiliable
作者: nfwolf    时间: 2010-11-14 10:49
膜拜仙子
作者: 黑色阳光_cu    时间: 2010-11-15 09:25


不太喜欢LWP,打完包太大了
作者: ghui501    时间: 2011-08-05 17:47
非常感谢谢!
作者: fine102    时间: 2011-08-15 22:03
搞不懂LWP为什么不默认支持HTTP持续连接。
黑色阳光_cu 发表于 2010-10-26 17:23



   默认不支持我们就引用一个包就好了
use LWP::ConnCache;
作者: sellie    时间: 2011-08-22 18:08
FAQ 要补充一条:
0. LWP是什么
作者: 515413928    时间: 2011-08-23 05:27
  多谢分享哇
作者: hunter_cao    时间: 2011-09-10 08:45
从中受益,非常感谢!
作者: yangds_cu    时间: 2011-12-27 20:33
mark
作者: kk861123    时间: 2012-10-17 15:29
请问$res->message 反馈的消息中"read timeout" 是什么样的错误?
作者: fine102    时间: 2013-03-19 14:59
仙子整理的不错。这是个好贴!
作者: 墨迹哥    时间: 2013-03-29 23:15
感谢这帖子。。。
作者: 唐归来    时间: 2013-05-14 19:30
学习学习……
作者: rubyish    时间: 2013-05-14 23:21
呵呵 先收藏了
非常感谢
作者: liu1061    时间: 2013-07-01 16:08
下次在总结个AnyEvent吧!
作者: lz小骆驼    时间: 2013-07-24 15:51
仙子辛苦啦,顶一个,虽然暂时还用不到!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2