Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Проблема с LWP + Cookie


Автор: sd1074 7.7.2008, 11:58
Здравствуйте! Проблема такая. Мне нужно получить страницу с URL http://mysite.ru, передав на неё Cookie вида "id=12345". Причём мне хотелось бы передать этот куки вручную.

Что я делаю:

Код

use LWP::UserAgent;
use LWP::ConnCache;

$ua = LWP::UserAgent->new;
$cache = $ua->conn_cache(LWP::ConnCache->new( )); #просто  чтобы держать соединение
$url = 'http://mysite.ru';
$resp = $ua->get($url,
  'Accept' => 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5',
  'Accept-Language' => 'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
  'Accept-Encoding'        => 'gzip,deflate',
  'Accept-Charset'         => 'windows-1251,utf-8;q=0.7,*;q=0.7',
  'Connection'             => 'keep-alive',
  'Keep-Alive'             => '300',
  'Cookie'                 => 'id=12345',
);

if ($resp->is_success) { 
    print $resp->content;
}
else { 
    print $ans->status_line, "\n";
}


Сейчас я ещё опишу немного про настройки сервера, потом будет понятно зачем.

В корне сервера (я имею доступ к серверу) лежит .htaccess, где прописано:
RewriteEngine On
RewriteRule index.htm http://mysite.ru/cgi-bin/index.pl

То есть при обращении к http://mysite.ru выполняется скрипт /cgi-bin/index.pl. Этот редирект (ну или точнее подмена адреса) работает нормально в браузере, да и вообще нормально работает.

Серверный скрипт /cgi-bin/index.pl имеет вид:
Код

#!/usr/bin/perl
print "Content-Type: text/html; charset=windows-1251\n\n";
print "Cookie: $ENV{'HTTP_COOKIE'}";


То есть просто выводит значение куки.

Если, $url в приведённом выше скрипте HTTP-клиента сделать равным 'http://mysite.ru' (как там указано сейчас), то скрипт выводит: "Cookie: ", то есть куки нет (ну на самом деле я проверял, там в хэше окружения вообще нет ключа 'HTTP_COOKIE'), а если изменить $url на 'http://mysite.ru/cgi-bin/index.pl', то всё работает (то есть выводится значение куки: "Cookie: id=12345").

При этом, в браузере куки выводится всегда, как и должно быть.
Как это так??!! Я что-то вообще голову сломал уже =\ Заранее спасибо.

Автор: tolkien 7.7.2008, 13:08
Если куки нет значит она не отправляется. Возможно она отправляется с запросом на  http://mysite.ru. Возвращается ответ с номером 300+ что нужен редирект. Выполняется второй запрос и с ним уже куки не отправляется. Проблема скорее всего ищите внутри LWP, а не в настройках сервера. Серваку побоку куки. Для него это просто заголовок. И если он есть, то попадает в окружение скрипта.

Автор: sd1074 7.7.2008, 14:12
Спасибо. Проблема решена. Вы правы, выполянется редирект и второй раз куки не отправляется.
Решение нашёл здесь на форуме:
$ua->default_headers->push_header('Cookie' => 'id=12345')
в этом случае кукис будет передаваться скаждым запросом. Работает.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)