LINUX.ORG.RU

помогите с перл ,(IO::Socket:INET) получает ответ очень долго


0

0

драсте всем,

зделал скрипт на перле для ХТТП запроса, вопрос теперь вот в чём ,
никак не пойму почему он так долго молчит, иммено после POST запроса,
если делаю GET запрос, то ответ вылетает моментально.

сам скрипт собственно:

#!/usr/bin/perl
use IO::Socket;
$host="192.168.0.24";
$port=80;
$socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port,Proto => "TCP");
print $socket "POST /~djung/index.php HTTP/1.1\n";
print $socket "User-Agent: curl/7.15.5 (i686-pc-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.7j zlib/1.2.3\n";
print $socket "Host: 192.168.0.24\n";
print $socket "Accept: */*\n";
print $socket "Content-Length: 9\n";
print $socket "Content-Type: application/x-www-form-urlencoded\n";
print $socket "\n";
print $socket "var=halloHTTP/1.1 200 OK";

@buffer=<$socket>;
close($socket);
print @buffer;

подскажите чё не так.

★★

Re: помогите с перл ,(IO::Socket:INET) получает ответ очень долго

> попробовал не пошло =(

у меня пошло :)

> ещё идеи?

В произвольном порядке: "\n" => "\r\n", tcpdump, strace -p `pidof perl`, LWP, "Transfer-Encoding: chunked"

phoenix ★★★★ ()

Re: помогите с перл ,(IO::Socket:INET) получает ответ очень долго

"\n" => "\r\n"> пробовал

tcpdump> тоже уже, ничего понять не могу

дело в том что ответ то приходит, тока долго длится это, порядком 25 секунд.

Transfer-Encoding: chunked >вообще ответа не дождёшься

LWP >можно поподробней я не знаю что это, совсем недавно на перле пробую что то писать

djung ★★ ()

Re: помогите с перл ,(IO::Socket:INET) получает ответ очень долго

>> LWP >можно поподробней я не знаю что это, совсем недавно на перле пробую что то писать
http://search.cpan.org/~gaas/libwww-perl-5.805/lib/LWP.pm

>> Transfer-Encoding: chunked >вообще ответа не дождёшься
почему вдруг? 
print $socket "9\r\nvar=hallo\r\n0\r\n\r\n";

>> дело в том что ответ то приходит, тока долго длится это, порядком 25 секунд.
может просто сервер больной?

phoenix ★★★★ ()

Re: помогите с перл ,(IO::Socket:INET) получает ответ очень долго

Есть подозрение, что у тебя для $socket в PerlIO включена дефолтная буферизация - построчная.

При этом последняя строка у тебя не завершается переводом строки - поэтому оно и подвисает. Это не говоря уже о том, что "HTTP/1.1 200 OK" там абсолютно лишние.

Впрочем, возможно, я и ошибаюсь. Но попробовать сказать $socket->autoflush(1) стоит. И убрать лишние данные.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.