2010-10-08 55 views
4
use LWP::Simple; 
use HTML::LinkExtor; 
use Data::Dumper; 
#my $url = shift @ARGV; 
my $content = get('example.com?GET=whateverIwant'); 
my $parser = HTML::LinkExtor->new(); #create LinkExtor object with no callbacks 
$parser->parse($content); #parse content 

現在如果我要發送POST和COOKIE信息以及與HTTP標頭我怎麼能配置與GET功能可按?還是必須自定義我自己的方法?如何使用Perl的LWP :: Simple發送cookies?

我的主要興趣是餅乾!然後發佈!

回答

4

LWP::Simple是非常簡單的HTTP GET請求。如果你需要做更復雜的事情(如cookies),你必須升級到完整的LWP::UserAgentcookie_jar是一個HTTP::Cookies對象,您可以使用它的set_cookie方法添加一個cookie。

use LWP::UserAgent; 

my $ua = LWP::UserAgent->new(cookie_jar => {}); # create an empty cookie jar 

$ua->cookie_jar->set_cookie(...); 

my $rsp = $ua->get('example.com?GET=whateverIwant'); 
die $rsp->status_line unless $rsp->is_success; 
my $content = $rsp->decoded_content; 
... 

LWP :: UserAgent還有一個post方法。

+1

但是什麼是set_cookie的參數!文檔指的是$版本,但沒有提供任何細節! http://search.cpan.org/~gaas/HTTP-Cookies-6.01/lib/HTTP/Cookies.pm#METHODS – Chloe 2013-01-14 19:25:44

+0

@Chloe,它期望你熟悉的cookie規範。參見[RFC 2965](https://www.ietf.org/rfc/rfc2965)。 – cjm 2013-01-14 23:56:57

2

您可能需要使用WWW::Mechanize代替。它已經粘在你想要的東西的大部分:

use WWW::Mechanize; 

my $mech = WWW::Mechanize->new(
    cookie_jar => { ... } 
    ); 

$mech->cookie_jar->set_cookie(...); 

$mech->get(...); 

my @links = $mech->links; 
+0

你不需要'cookie_jar => {}'這裏,因爲WWW ::機械化已經默認爲(不像它的基類,LWP :: UserAgent的,除非請求不創建一個cookie_jar)。 – cjm 2010-10-13 07:45:56

+0

嘿,我永遠不會記得它走的路。 :) – 2010-10-13 15:47:10