проблеми с установкой модулей

Discussion in 'PHP' started by eLWAux, 12 Nov 2008.

  1. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    привет

    нашол пример для роботи через прокси:
    Code:
    system('cls');
    
    use IO::Socket::Socks;
    my $proxy_addr = "128.10.10.15";
    my $proxy_port = 3128;
    my $conn_addr = "http://www.mail.ru/";
    my $conn_port = 80;
    my $socks = new IO::Socket::Socks(ProxyAddr=>$proxy_addr,
                                      ProxyPort=>$proxy_port,
                                      ConnectAddr=>$conn_addr,
                                      ConnectPort=>$conn_port,
                                      ) or die "Can't create Sock: $!";
     
    print $sock "GET ",$conn_addr," HTTP/1.0\n\n";
     
    while($line = <$sock>) {
     
      print $line;
     
    } 
    $socks->close()
    запускаю,.. пишет
    , я так понял что модуль IO::Socket не установлен..

    запускаю ppm.bat
    ввожу install IO::Socket
    и опять ошибка!

    что делать?
     
  2. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    О!

    установил вроде..) скачал новий перл и установил..
    ppm.bat:
    проверка IO::Socket:
    как я понямаю, я устанил...

    запускаю скрипт с надеждой, и ..... пля! опять ошибка:
    что такое?

    ================================

    переделал скрипт
    Code:
    system('cls');
    print '1';
    
    use IO::Socket::Socks;
    print '1';
    my $proxy_addr = "128.10.10.15";print '1';
    my $proxy_port = 3128;print '1';
    my $conn_addr = "http://www.mail.ru/";print '1';
    my $conn_port = 80;print '1';
    my $socks = new IO::Socket::Socks(ProxyAddr=>$proxy_addr,
                                      ProxyPort=>$proxy_port,
                                      ConnectAddr=>$conn_addr,
                                      ConnectPort=>$conn_port,
                                      ) or die "Can't create Sock: $!";
     print '1';
    print $sock "GET ",$conn_addr," HTTP/1.0\n\n";
     print '1';
    while($line = <$sock>) {
     print '1';
      print $line;
     print '1';
    } 
    $socks->close();
    print '1';
    теперь ошибка:
    что я не так делаю?
     
    #2 eLWAux, 12 Nov 2008
    Last edited: 12 Nov 2008
  3. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    тебе надо установить модуль IO::Socket::Socks
    Какой perl ты пользуешь? Может так получить, что ты установил необходимый модуль (кстате в ActiveState он установлен, если по нему есть документация), но запускаешь с помощью другого perl (который прописан в системной переменной). Попробуй запустить скрипт указав полный путь к perl.exe. И вообще ActivePerl лучше всего ставить в корень!
    Я когда разюирался с модулем IO::Socket::Socks столкнулся с проблемой другого плана! Он отказался работать с обычной проксей! Только для Socks 5
     
  4. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    5.10.0 использую
    перл у меня стоит в : c:/perl/ ,тоесть в корне
    просто у меня привязка к файлам *.pl стоит на запуск c:/perl/bin/perl.exe, тоесть скрипти норм запускаютса..

    вот вроде я модуль установил.., только запускаю и пишет ошибка сооденения с чем то..
    (не с прокси и не с сайтом)
     
  5. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    Кстате, знакомый скрипт. :) Кажется я знаю где ты его взял! Но он у меня так и не заработал. :-( я там написал, что переделать его надо.
    И еще: попробуй запустить: perl -e "use IO::Socket::Socks"; из комендной строки.
    Если выдаст ошибку, значит модуль не установлен! А пока он у тебя на его вызов и ругается!
    Ты, кстате, в начале скрипта use пишешь?
     
  6. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    запускаю скрипт
    Code:
    system('cls');
    
    $num = 0;
    sub p {$num++; print $num;}
    
    
    use IO::Socket::Socks;
    p;
    my $proxy_addr = "75.69.203.194";
    p;
    my $proxy_port = 15689;
    p;
    my $conn_addr = "http://www.mail.ru/";
    p;
    my $conn_port = 80;
    p;
    my $socks = new IO::Socket::Socks(ProxyAddr=>$proxy_addr,
                                      ProxyPort=>$proxy_port,
                                      ConnectAddr=>$conn_addr,
                                      ConnectPort=>$conn_port,
                                      ) or die "Can't create Sock: $!";
    p;
    print $sock "GET ",$conn_addr," HTTP/1.0\n\n";
    p;
    while($line = <$sock>) {
    print $line;/thread91556.html
    p;
    } 
    $socks->close();
    p;
    (прокси взял из сайта http://www.checker.freeproxy.ru/checker/last_checked_proxies.php для Socks5)

    результат виполнения:
     
  7. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    Все дело в том, что по адресу 75.69.203.194:15689 обычный прокси сервер, а не Socks 5. IO-Socket-Socks только для socks 5.

    Вот рабочий пример кода для работы с обычной проксей:
    Code:
    use IO::Socket;
    use IO::Socket::INET;
    
    my $conn_addr = "http://www.mail.ru/";
    
    my  $sock = IO::Socket::INET->new(PeerAddr => '75.69.203.194',
                                     PeerPort => 'http(15689)',
                                     Proto    => 'tcp') or die "Can't create Socks: $!";
    
    print $sock "GET ",$conn_addr," HTTP/1.0\n\n";
    
    while($line = <$sock>) {
    print $line;
    } 
    Проверял. Все работает.
     
  8. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    мдее..
    что со мною..

    Code:
    use IO::Socket;
    use IO::Socket::INET;
    
    sub saveFile
    {
    	open(myFILE,">$_[0]") || die "error: $!";
    	print myFILE $_[1];
    	close(myFILE);
    } 
    
    my $conn_addr = "http://www.mail.ru/";
    
    my  $sock = IO::Socket::INET->new(PeerAddr => '75.69.203.194',
                                     PeerPort => 'http(15689)',
                                     Proto    => 'tcp') or die "Can't create Socks: $!";
    
    print $sock "GET ",$conn_addr," HTTP/1.0\n\n";
    $answ='';
    while($line = <$sock>) {
    $answ.=$line;
    } 
    
    saveFile('result.html',$answ);
    результат:
    думал.., может прокси дохлий? полошол опять на http://www.checker.freeproxy.ru/checker/last_checked_proxies.php все перепробивал - результат один и тот же((
     
  9. demond

    demond Member

    Joined:
    5 Nov 2008
    Messages:
    101
    Likes Received:
    22
    Reputations:
    5
    попробуй изменить 14-ю строчку на PeerPort => '15689',