[Perl] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Fepsis

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

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Спасибо..) :) Работает..)
    А нельзя ли очистить часть экрана..?! Например, только последнюю строчку... Конечно всё задуманное можно и с system("cls"); замутить, но если есть возможность удалять часть сообщений, то я не хочу изобретать велостпед :)
     
  2. 1NtR0

    1NtR0 Elder - Старейшина

    Joined:
    14 Apr 2007
    Messages:
    235
    Likes Received:
    89
    Reputations:
    35
    Подскажите как в perl с сокс5 подконнектиться и вывести страницу?
    Весь инет перерыл, ничего ненашел
     
  3. BluR

    BluR Member

    Joined:
    6 Aug 2009
    Messages:
    7
    Likes Received:
    20
    Reputations:
    0
    такая проблема ...
    получаю в ответ от сервера ошибку ...

    Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

    перевод :

    Подтверждение ViewState MAC неудачу. Если это приложение размещается веб-фермы или кластере, убедитесь, что конфигурация <machineKey> задает тот же validationKey и проверка алгоритма. AutoGenerate не может быть использована в кластере.

    Как исправить ?
     
  4. Fepsis

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

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Вопрос по потокам:

    В скрипте задаётся массив @bas с некоторым количеством элементов...

    Создаю процедуру, которая извлекает по одному элементу массива и дописывает его в файл... Сама процедура:
    PHP:
    sub gogo
    {
       
    my ($name) = @_;
       while(
    $elm shift(@bas))
       {
          
    open(OUT">> $name.txt");
          print 
    OUT "$elm\r\n";
          
    close(OUT);
       }
    }
    Далее создаю несколько потоков, выполняющих функцию gogo и прописываю ждать завершения работы всех потоков...
    PHP:
    foreach $ac (@acc)
    {
        
    push @threadsthreads->create(\&gogo$ac);
    }


    foreach 
    my $thread (@threads
    {
        
    $thread->join();
    }
    Каждый поток создаёт свой файл, куда записывает элементы массива, которые он обработал (извлёк из массива)...
    Что я ожидал от работы этого скрипта..?? Ожидал я, что элементы массива @bas будут распределены по файлам потоков.. тоесть первый поток вытащил первый элемент, записал в свой файл, второй поток - второй элемент, и записал уже в свой файл.. и т.д.

    А в результате каждый поток пробегает весь массив целиком... Причём я даже пробовал каждому из потоков задать разные задержки.. Почему так происходит, я же извлекаю элементы с помощью shift, который удаляет элемент..?! Как лучше реализовать задуманное..?!
     
  5. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    Ох уж эти потоки( Точно не помню, но вроде должно помочь

    use threads::shared;
    my @bas : shared;
     
    2 people like this.
  6. BluR

    BluR Member

    Joined:
    6 Aug 2009
    Messages:
    7
    Likes Received:
    20
    Reputations:
    0
    Так что это может быть ... проверил весь скрипт тысячу раз ... серверу уходит верный запрос ... а в ответ такое ... Может быть Win 7 ???
     
  7. 1NtR0

    1NtR0 Elder - Старейшина

    Joined:
    14 Apr 2007
    Messages:
    235
    Likes Received:
    89
    Reputations:
    35
    Вроде разобрался как с соксами работать, но не хочет оно на сайт заходить, заходит только на ип сервера =\

    Code:
    my $sock = new Net::SOCKS(socks_addr => '123.123.123.123',
              socks_port => 9671,
              protocol_version => 5);
    my $f= $sock->connect(peer_addr => '2ip.ru', peer_port => 80);
    print "connect status: ",
         Net::SOCKS::status_message($sock->param('status_num')), "\n";
    
    if ($sock->param('status_num') == SOCKS_OKAY) {
      print $f "clintdw\n";
      while (<$f>) { print }
      
      $sock->close();
    }
    
     
    #1387 1NtR0, 5 Jan 2010
    Last edited: 5 Jan 2010
  8. cr0w

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

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    1NtR0

    Что значит " заходит только на ип сервера" ?
    А что за херню вы посылаете заместо http-запроса?

    BluR

    А причем тут Perl?

    Fepsis

    Последнюю строку можно просто выводить без переноса строки:

    Code:
    perl -e"$|++; print qq($_[COLOR=YellowGreen]\r[/COLOR]) and sleep 1 for 1..20"
     
    #1388 cr0w, 5 Jan 2010
    Last edited: 5 Jan 2010
    1 person likes this.
  9. 1NtR0

    1NtR0 Elder - Старейшина

    Joined:
    14 Apr 2007
    Messages:
    235
    Likes Received:
    89
    Reputations:
    35

    Заходит например не на ww.2ip.ru а на 188.40.74.9 (это ип адрес сервера, на котором находиться 2ip.ru)

    ВОт и я незнаю что за херня, знал бы не спрашивал.. Как правильно сделать ?
     
  10. cr0w

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

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    1NtR0

    Code:
    print $f "GET http://2ip.ru/ HTTP/1.1\n"
        . "Host: 2ip.ru\n\n";
    С HTTP-протоколом начинай знакомиться. (;
     
    2 people like this.
  11. 1NtR0

    1NtR0 Elder - Старейшина

    Joined:
    14 Apr 2007
    Messages:
    235
    Likes Received:
    89
    Reputations:
    35
    Твой код ничего не выводит
     
  12. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    1NtR0, вооружайтесь RFC и снифером и смотрите, какие пакеты отсылаются и принимаются. Для примера работы с соксами на перле можете посмотреть Toolza от Pashkela. Там все на сокетах реализовано
     
    1 person likes this.
  13. BluR

    BluR Member

    Joined:
    6 Aug 2009
    Messages:
    7
    Likes Received:
    20
    Reputations:
    0

    При том что это в ответ получай perl скрипт ... хотелось бы знать не может ли быть в нём проблемы ??? может я что то недоотправляю ... как я понимаю ошибка в том что мак адрес не соответствует тому для которого сгенерированна переменная , которая в свою очередь выдергивается из страницы которую скрипт получает до этого ... да и если бы переменная была бы не верной выдавалась бы другая ошибка ...

    P.s : с perl знаком от силы неделю .... поэтому и спрашиваю ...
     
  14. cr0w

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

    Joined:
    11 Sep 2008
    Messages:
    92
    Likes Received:
    141
    Reputations:
    33
    Мой код пишет http-запрос в сокет, а выводить что-то должен твой код.

    Кстати, если работешь с socks5, то попробуй еще модуль IO::Socket::Socks, он поудобней:
    Code:
    use strict;
    use warnings;
    use IO::Socket::Socks;
    
    my $socks = new IO::Socket::Socks(
                ProxyAddr => '98.203.236.60',
                ProxyPort => 43981,
                ConnectAddr => '2ip.ru',
                ConnectPort => 80
        ) or die 'can\'t conect to proxy';
    
    print $socks "GET / HTTP/1.1\n"
               . "Host: 2ip.ru\n\n";
    
    print while <$socks>;
    
    $socks->close();
    BluR

    Тут кодеры на вопросы отвечают, а не экстрасенсы. Показать свой сверхсекретный код не желаешь? (;
     
  15. BluR

    BluR Member

    Joined:
    6 Aug 2009
    Messages:
    7
    Likes Received:
    20
    Reputations:
    0
    Ничего секретного ... вот кусок кода ... весь код большой ... да и до этого есть только гет запросы которые в ответ получают нормальные страницы ...

    $answ =~ s/\s*.*VIEWSTATE"\svalue="//igxsm;
    $answ =~ s/"\s*.*\s*//igxsm;
    my $VIEWSTATE = uri_escape("$answ");

    $eve =~ s/\s*.*id="__EVENTVALIDATION"\s*value="//igxsm;
    $eve =~ s/"\s*.*\s*//igxsm;
    my $EVENTVALIDATION = uri_escape("$eve");



    my $reg = $ua->post("http://profil.centrum.cz/icq.aspx",
    ['__EVENTTARGET' => ,
    '__EVENTARGUMENT' => ,
    '__VIEWSTATE' =>$VIEWSTATE,
    'ua_icqstatus' => '1',
    'ua_icq' => ,
    'icqpassword' => ,
    'passwordset' => '0',
    'ua_securitycode_question' =>$scr,
    'ua_securitycode_answer' =>$captcha,
    'btnconnect' => '',
    '__VIEWSTATEENCRYPTED=' => ,
    '__EVENTVALIDATION' =>$EVENTVALIDATION,])->as_string;
     
  16. BluR

    BluR Member

    Joined:
    6 Aug 2009
    Messages:
    7
    Likes Received:
    20
    Reputations:
    0
    Проблема решена ... сори за беспокойство )))
     
  17. vladan

    vladan New Member

    Joined:
    21 Feb 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Очень прошу помощи. Хотелось бы сделать небольшую регистрацию на сайте и запретить регистрацию ников меньше 5 символов. Написал:

    Code:
    if ($domen => 5) {
    # если больше или равно
    }
    else {
    #если меньше
    }
     
  18. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    А в чем затруднение-то?
    Code:
    if (length $username >= 5) {
      # Good
    } else {
      # Error
    }
    
     
  19. vladan

    vladan New Member

    Joined:
    21 Feb 2009
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Огромное спасибо!!!!

    PS перл начал учить неделю назад. Надо будет почитать про length
     
  20. [Life]

    [Life] Banned

    Joined:
    7 Jan 2010
    Messages:
    74
    Likes Received:
    3
    Reputations:
    0
    Доброго времени суток!) Вот пишу скрипт, обрабатывающий определенным образом инет страницу(указываем урл). Суть проблемы в том, что я не знаю какой модуль использовать для парсинга страниц? И что делать, например, с сылками вида www.site.ru/page1/ , где не указан конкрентный файл?
     
Thread Status:
Not open for further replies.