我是Perl的新手,我想写一个Perl程序:
>创建HTTP请求
>发送到任何URL(例如http://www.google.com)
>在请求中包含一个cookie
>将http响应代码记录在文件中
我试过这个:
#!/usr/bin/perl require HTTP::Request; require LWP::UserAgent; $request = HTTP::Request->new(GET => 'http://www.google.com/'); $ua = LWP::UserAgent->new; $ua->cookie_jar({file => "testcookies.txt",autosave =>1}); $response = $ua->request($request); if($response->is_success){ print "sucess\n"; print $response->code; } else { print "fail\n"; die $response->code; }
请告诉如何在“请求”中设置cookie
当我们发送HTTP :: Request时如何设置cookie
我期待着像:
$request = HTTP::Request->new(GET => 'http://www.google.com/'); $ua = LWP::UserAgent->new; $ua->new CGI::Cookie(-name=>"myCookie",-value=>"fghij");
这可能吗??
解决方法
如上所述,Cookie位于HTTP :: Cookie中:
>你需要创建一个cookie jar
>设置要放在jar中的cookie的值
>然后将该jar与您的用户代理相关联
例如:
my $ua = LWP::UserAgent->new; my $cookies = HTTP::Cookies->new(); $cookies->set_cookie(0,'cookiename','value','/','google.com',80,86400,0); $ua->cookie_jar($cookies); # Now make your request
set_cookie有很多参数:
set_cookie( $version,$key,$val,$path,$domain,$port,
$path_spec,$secure,$maxage,$discard,\%rest )
这是因为cookie jar是从浏览器(UserAgent)的角度设计的,而不是单个请求.这意味着在这种情况下并非所有的论据都是如此重要.
您需要正确的是$key,$port.
关于:
500 Can’t connect to www.google.com:80
(Bad hostname ‘www.google.com’)
这意味着LWP无法查找Google的地址.你在网页代理后面吗?如果是这样,您需要在UA中设置您的代理,方法如下:
$ua-> proxy([‘http’,’https’],’http://proxyhost.my.domain.com:8080/‘);