Как я могу использовать Perl для отправки и Запрос HTTP с cookie?

Я плохо знаком с 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 в 'запросе' т.е.

как установить cookie, когда мы отправляем HTTP::Request

я ожидал что-то как:

$request = HTTP::Request->new(GET => 'http://www.google.com/');
$ua = LWP::UserAgent->new;
$ua->new CGI::Cookie(-name=>"myCookie",-value=>"fghij");

действительно ли это возможно??

10
задан dexter 22 March 2010 в 05:11
поделиться

2 ответа

Как уже говорилось, куки находятся в HTTP::Cookies:

  • Вам нужно создать cookie jar

  • Вы задаете значение куки, которые нужно поместить в jar

  • Затем вы связываете этот jar с вашим агентом пользователя

Например:

my $ua = LWP::UserAgent->new;
my $cookies = HTTP::Cookies->new();
$cookies->set_cookie(0,'cookiename', 'value','/','google.com',80,0,0,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 разработан с точки зрения браузера (UserAgent), а не отдельного запроса. Это означает, что не все аргументы так важны в данном случае.

Те, которые вы должны правильно понять, это $key, $val, $path, $domain, $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/');

20
ответ дан 3 December 2019 в 17:19
поделиться
3
ответ дан 3 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: