The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Perl - чтение сокета"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Perl)
Изначальное сообщение [ Отслеживать ]

"Perl - чтение сокета"  +/
Сообщение от slejpnir (ok) on 05-Дек-10, 10:03 
Сори за нубовский вопрос, пытаюсь скачать бинарный файл через perl-овку
И вылезло сразу два вопроса:

1. Как очистить хидеры которые шлёт апач
2. Выдать вывести весь файл что отдаёт сервер

[а теперь немного говнокода]

sub requester
{        
my $sock = new IO::Socket::INET
        (
        PeerAddr => $_[2],
           PeerPort => 80,
           PeerProto => 'tcp',
           TimeOut => 10
        ) or print "Can't connect\n";
    $sock->autoflush;
    
         my $re =
        "POST $_[1] HTTP/1.1\n".
        "Host: $_[2]\n".
        "User-Agent: Mozilla/4.0\n".
        "Connection: close\n".
        "Cookie: $_[5]".
        "Content-Type: application/x-www-form-urlencoded\n".
        "Content-Length: ".length($_[3])."\n\n".$_[3];
    
        print $sock $re;
        #read($sock, my $answ, 10000);
        sysread($sock, my $answ, 10000);
        
        if($_[0] == 1){if($answ =~ $_[4]){if($answ =~ /Set-Cookie: (\S+); /){return $1}}}
        if($_[0] == 2){
            if($answ =~ /Content-Length: (\d+)/)
                {
                binmode STDOUT;
                print $answ;
                }
            }
        
        return 0;
        close($sock);
}
[EOF]

игрался с sysread, но судя по всему я что то не так делаю.. как считать весь файл?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Perl - чтение сокета"  +/
Сообщение от slejpnir (ok) on 05-Дек-10, 10:27 
while(<$sock>)
{
sysread($sock, my $answ, 10000);
binmode STDOUT;
print $answ;
}

Если скачивать таким образом, то файлы бьются и не проходят md5 сумму
Думаю что дело всё таки в хидерах апача, как очистить его?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Perl - чтение сокета"  +/
Сообщение от NuINu (??) on 05-Дек-10, 15:18 
> while(<$sock>)
> {
>  sysread($sock, my $answ, 10000);
>  binmode STDOUT;
>  print $answ;
> }
> Если скачивать таким образом, то файлы бьются и не проходят md5 сумму
> Думаю что дело всё таки в хидерах апача, как очистить его?

ересь какая то написана, в начале каждого цикла читается с сокета некая строка, если она считывается, то она отбрасывается, и далее читается с этого сокета еще до 10000 байт информации, они то и записываются в стдаут.
надо ли удивляться что файлы "бьются"?

и зачем этот сдтаут в цикле переводить в бинарный режим? достаточно это сделать один раз.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру