Forum Webscript.Ru

Программирование => Perl => Тема начата: skillcoder от 25 Мая 2006, 17:04:54

Название: LWP::UserAgent контроль заголовков
Отправлено: skillcoder от 25 Мая 2006, 17:04:54
Необходимо отправить серверу в точности вот такой заголовок

POST /game/flottenversand.php?session=7777318ddc1a HTTP/1.1
Host: megagame.ru
User-Agent: Mozilla/5.0 (Windows; U; Win98; ru; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3
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
Keep-Alive: 300
Connection: keep-alive
Referer: [url]http://megagame.ru/game/flotten3.php?session=7777318ddc1a[/url]
Cookie: U_ru2:meganame=U_ru2%3meganame; PHPSESSID=99f0b256b40e4f6f485eb595d6435d37
Content-Type: application/x-www-form-urlencoded
Content-Length: 360

thisgalaxy=6&thissystem=259&thisplanet=14&thisplanettype=1&speedfactor=1&thisresource1=15034&thisresource2=21786&thisresource3=72181&galaxy=6&system=259&planet=4&planettype=2&ship203=6&consumption203=50&speed203=15000&capacity203=25000&ship209=1&consumption209=300&speed209=4000&capacity209=20000&speed=1&order=8&resource1=15034&resource2=21786&resource3=73159


Но некак немогу этого сделать.
Название: LWP::UserAgent контроль заголовков
Отправлено: skillcoder от 25 Мая 2006, 19:23:35
Нашёл способ забить хедеры как нужно, но после этого процедура перестала адекватно работать.
Что в ней не так?

sub get_page
{
my $uri = shift;
my $content = shift;
my $ref = shift;

$uri =~ /^http:\\/\\/(.*?)\\/(.*?)/;
my $host = $1;
my $link = $2;

my $ua = LWP::UserAgent->new;
$ua->cookie_jar(HTTP::Cookies->new(file => "lwpcookies.txt", autosave => 1));
$ua->agent(\'Mozilla/5.0 (Windows; U; Windows NT 5.2; ru; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3\');

$ua->default_header(\'Host\' => $host);
$ua->default_header(\'Accept\' => \'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\');
$ua->default_header(\'Accept-Language\' => \'ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\');
$ua->default_header(\'Accept-Encoding\' => \'gzip, deflate\');
$ua->default_header(\'Accept-Charset\' => \'windows-1251,utf-8;q=0.7,*;q=0.7\');
$ua->default_header(\'Keep-Alive\' => \'300\');
$ua->default_header(\'Connection\' => \'keep-alive\');
$ua->default_header(\'Content-Type\' => \'application/x-www-form-urlencoded\');
        $ua->default_header(\'Referer\' => $ref);

my $req = HTTP::Request->new(POST => $uri);
$req->content($content);
my $rez = $ua->request($req);
return $rez;
}
Название: LWP::UserAgent контроль заголовков
Отправлено: xames от 26 Мая 2006, 06:57:28
$r = HTTP::Request->new(POST => $url);
...
$r->header(%head);
...
$r=$ua->request($reqq);
 

#########
в %head и хранятся все заголовки в виде:
Ключ - название заголовка
Значение - его содержимое
Название: LWP::UserAgent контроль заголовков
Отправлено: skillcoder от 26 Мая 2006, 09:53:36
Каким образом можно узнать что именно отсылает скрипт, т.к. имеет значение в каком именно порядке идут строки в заголовке.
Например у себя на компе я использую снифер (CommView), но как быть если скрипты лежат на хостинге?
Название: LWP::UserAgent контроль заголовков
Отправлено: xames от 26 Мая 2006, 14:01:30
use LWP::Debug qw(+ -conns);
LWP::Debug::trace(\'send()\');
Название: LWP::UserAgent контроль заголовков
Отправлено: skillcoder от 26 Мая 2006, 16:09:44
Можно немного поподробнее?
Я так и не понял как распечатать то что посылается.

Изучение Perldoc LWP::Debug (http://search.cpan.org/~gaas/libwww-perl-5.805/lib/LWP/Debug.pm) не помогло
Название: LWP::UserAgent контроль заголовков
Отправлено: skillcoder от 26 Мая 2006, 18:06:43
ПредЧувствую что у меня будет ещё один вопрос по этой теме.

По умолчанию LWP отправляет Keep-Alive: close.

Строка:
$req->header(\'Connection\' => \'keep-alive\');
в итоге просто добавляет keep-alive, а не заменяет close на keep-alive

на выходе имеем
Connection = keep-alive, close;

Cтрока:
print $res->as_string;

выдает
Connection: close

Как сделать так чтоб в отправляемом заголовке было Connection: Keep-Alive ?

P.S. Пожалуста ответте на предыдущий вопрос. Желательно дать код который бы выводил всё что отправляется, т.к.
Цитировать
xames:

use LWP::Debug qw(+ -conns); LWP::Debug::trace(\'send()\');
я не понял :(