PDA

Просмотр полной версии : perl & LWP:UserAgent


x-treem
07.05.2007, 14:54
значет есть проблема.
с помощью модуля LWP::UserAgent надо послать POST запрос. НО! Ответ считывать не надо. то есть послал, и забыл. плевать мол на то что сервер ответит. это возможно?

KSURi
07.05.2007, 16:16
Если я тебя правильно понял, то в данном случае - нет.
Надо использовать IO::Socket, тк LWP ждет хоть какой-то ответ от сервера или выдает еррор по таймауту.

x-treem
07.05.2007, 16:18
очень жаль...
спасибо

Developer
07.05.2007, 16:59
Насколько я знаю, сначала идет коннект, потом уже шлется запрос, поэтому тайм-аут действует только для коннекта к серверу.

Не знаю как в PERL, в PHP просто посылался запрос и сразу закрывалось соединения для этого (никаких fgets).

KSURi
07.05.2007, 17:12
из perldoc LWP::UserAgent:
Get/set the timeout value in seconds. The default timeout() value is 180 seconds, i.e. 3 minutes.

The requests is aborted if no activity on the connection to the server is observed for timeout seconds. This means that the time it takes for the complete transaction and the request() method to actually return might be longer.

genom--
07.05.2007, 20:35
бугаг делай

допустм так

my $res = $ua->post('http://forum.web-hack.ru/index.php?act=Login&CODE=01', {'referer' => '', 'UserName' => $login2, 'PassWord' => $password2, 'CookieDate' => 1 })or die 'Bad connect to web-hack.ru';

просто запрос и не требуй чтобы lwp запрашивал инфу в ответ и все будет нормально
ненадо писать типо ->content; ->as_string; и тд.

KSURi
07.05.2007, 20:51
как раз таки в данном случае, ты запрашиваешь ответ
ты присваиваешь результат $res => скрипт будет ждать пока LWP что-то вернет в $res
а вообще он в любом случае будет ждать, тк LWP всегда возвращает экземпляр HTTP::Response

а content заполняется автоматом, а не при вызове

genom--
07.05.2007, 20:56
а тебе не кажется что $res это просто указатель -- и если он автоматом заполняется то попробуй его выведи принтом получишь адрес в оперативе --- еслиб он автоматом заполнялся то накой придумывать content as_string и head -- если полюбому они все есть в переменной??? если даже я неправ можно просто поставить небольшой таймут на соеднение и все

KSURi
07.05.2007, 21:29
И так по порядку:

1. При print'e получаем: HTTP::Response=HASH(0x28f2a74)link.
Если присмотреться к строке внимательно, ты ты заметишь в ней "HTTP::Response", это означает, что переменная является экземпляром класса HTTP::Response. А HASH(0x28f2a74) показывает тип переменной и ее адрес в таблице переменных перла.

2. Надеюсь эти скриншоты тебе помогут разобраться в сути дела:
http://img513.imageshack.us/img513/3039/perlcw1.th.png (http://img513.imageshack.us/my.php?image=perlcw1.png)http://img59.imageshack.us/img59/5323/perl2zg4.th.png (http://img59.imageshack.us/my.php?image=perl2zg4.png)

genom--
07.05.2007, 21:39
ну вот -- а может ты увидил ответ серва из-за того что запросил его через редактор и он его специально его получил??? -- не ты прав -- позырил в фаере трафф на соединение отосланный и полученный -- да выкачивает =)

KSURi
07.05.2007, 21:43
Так тебя устроит?
http://img63.imageshack.us/img63/6660/perl3sk2.th.png (http://img63.imageshack.us/my.php?image=perl3sk2.png)

ЗЫ: ты прикидываешся чтоли...?