Как я могу использовать Perl для отправки и HTTP-запроса с cookie? - PullRequest
10 голосов
/ 19 марта 2010

Я новичок в 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");

это возможно ??

Ответы [ 2 ]

20 голосов
/ 19 марта 2010

Как уже упоминалось, файлы cookie находятся в HTTP :: Cookies:

  • Вам необходимо создать банку с печеньем

  • Вы устанавливаете значениефайлы cookie для добавления в банку

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

Например:

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 Не удается подключиться к www.google.com:80 (неверное имя хоста "www.google.com")

Это означает, что LWP не можетищите адрес для Google.Вы за веб-прокси?Если это так, вам нужно будет также установить свой прокси в UA, используя что-то вроде:

$ ua-> proxy (['http', 'https'], 'http://proxyhost.my.domain.com:8080/');

3 голосов
/ 19 марта 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...