1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Авторизация на другом сервере средствами php

Тема в разделе "Web Coding", создана пользователем GROB, 30 июл 2007.

Статус темы:
Закрыта.
Модераторы: latteo
  1. GROB

    GROB

    Регистр.:
    28 мар 2006
    Сообщения:
    177
    Симпатии:
    63
    Суть такая, хочу писать скрипт, который заходит на другой сайт - вводит логин и пасс(авторизация куки) и после переходит по ссылкам.

    Как это возможно реализовать? И возможно ли вообще?
     
  2. nnmkayf

    nnmkayf

    Регистр.:
    25 июл 2007
    Сообщения:
    153
    Симпатии:
    98
    Да можно сделать такой скрипт, у меня есть даже готовый на перле, если нужен выложу позже (я сейчас на работе, а скрипт дома).
    А к php я его прикрутил как плагин, который вызывается через exec - так как лично мне представлется, что парсить и вообще все подобные опреации лучше делать на перле. а на php это наверное можно реализовать через curl, но лично у меня с ним отношения не сложились :(


    Алгоритм работы:
    на первый урл (на котором есть форма логина пароля) постишь свои логин и пароль.
    Сохранаешь cookie в переменную или через тот-же коннект запрашиваешь урл, который тебе нужно распарсить.
    Парсинг делается как обычно, просто вытаскиваешь, что тебе нужно.
    Конкретно в моем скрипте происходит логин на nnm.ru по урлу новости и выдираются все линки на рапидшару.
     
  3. judgefog

    judgefog

    Регистр.:
    12 авг 2006
    Сообщения:
    487
    Симпатии:
    335
  4. the_stalker

    the_stalker Постоялец

    Регистр.:
    19 фев 2007
    Сообщения:
    116
    Симпатии:
    3
    Зря ты так курл не уважаешь! С помощью этой библиотеки можно реализовать абсолютно все. Любую авторизацию даж с использованием SSl
    это ты к чему влепил? не сечешь иди мимо.
    В гугле все давно расписано про аутентификацию через курл это очень просто и не займет много времени.
    Даже тут http://www.php.net/curl куча примеров есть
     
  5. VictorVi

    VictorVi Прохожие

    Snoopy тебе поможет. Помоему самый простой и приятный класс. В документации есть пример реализации аутентификации. А ссылки выдерешь при помощи рег. выражений.

    http://snoopy.sourceforge.net/
     
  6. james7

    james7 Создатель

    Регистр.:
    30 июн 2007
    Сообщения:
    30
    Симпатии:
    4
    Пользуйтесь curl, он максимально удобен, единственное на чем бы я остановил внимание.

    1. Не забывайте читать и передавать куки
    2. Передавайте корректный хедер браузера, т.к некотрые сайты могут его проверять
    3. Делая вход для сайтов посмотрите не используется там установка куков или вызова других скриптов жабаскриптами, т.к их придется читать и обрабатывать.
     
  7. the_stalker

    the_stalker Постоялец

    Регистр.:
    19 фев 2007
    Сообщения:
    116
    Симпатии:
    3
    Первый раз слышу про это гавно. Извините другого слова не нашел, потому что меня всегда бесили люди которые выпендриваются что они очень умные и пишут свои классы.
    Зачем что то делать когда уже есть идеальные наработки?
    Даже если разобратся как это работает, то работать это будет в несколько раз медленнее.
    CURL идет в комплекте с пакетом XAMPP и требует всего лишь копирования нескольких файлов в системную папку (это в винде).
     
  8. nnmkayf

    nnmkayf

    Регистр.:
    25 июл 2007
    Сообщения:
    153
    Симпатии:
    98
    Вот как и обещал скрипт

    PHP:
    #!/usr/bin/perl
    # цепляем либы
    use strict;
    use 
    lib  '/usr/local/lib/perl5/site_perl/5.8.8/i686-linux/';
    use 
    LWP::UserAgent;
    use 
    HTTP::Request::Common;
    use 
    Text::Iconv;
    #инстанцы необходимых объектов
    my $converter Text::Iconv->new"cp1251","utf-8");
    my $localFile './store.htm';
    my $ua LWP::UserAgent->new({'agent'=>'Mozilla/5.0 (X11; U; Linux i686; ru; Alexa Toolbar; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6'});
    $ua->cookie_jar({ file => "./.cookies.txt" });
    # получаем страничку после логина
    my $response $ua->request(POST 'http://www.nnm.ru', [login => 'сюда писать логин''passwd' =>'сюда писать пароль' ]);
    my  $cookie $response->header'Set-Cookie' );
    # получаем страничку которую нужно парстить 
    $response $ua->request(GET @ARGV[0]);
    my $content $response->content;
    # далее небольшие извращения связанные с тем что я пишу в основном на php и в perl не очень понял как парсить. Тебе вероятно можно остановится на этом этапе
    open (FH,"> ".$localFile);
    print 
    FH $content;
    close (FH);
    open (FH,"< ".$localFile);
    my $result '';
    my $resultWithoutComments '';
    my $proceed 0;
    my $avatar 0;
    my $line;
    # вытаскиваем тело сообщения
    while (defined($line = <FH>) )
    {
        
    $line =~s/<div\sclass=\"cut\"><img\ssrc=\"http:\/\/www.nnm.ru\/img\/default\/body\/cut.gif\"\s\/><\/div>//;
        if (
    $line =~m/<div id="bottom-banner">/)
        {
            
    $proceed = 0;
        }
    #   if (
    $line =~m/<div class="listing">/)
        if (
    $line =~m/<div id="new-reyt">/)
        {
            
    $resultWithoutComments=$result;
        }
        if (
    $line =~m/<div class="avatar">/)
        {
            
    $avatar=1;
        }
        if (
    $proceed && !$avatar && !($line =~m/>Ответить<\/a>/ || $line =~m/>жалоба<\/a>/) )
        {
            
    $result .= $line;
        }
        if (
    $line =~m/<\/div>/)
        {
            
    $avatar=0;
        }
        if (
    $line =~m/<div class="content" id="new">/)
        {
            
    $proceed = 1;
            
    $result .= $line;
        }
    }
    close (FH);
    $result = $converter->convert($result);
    #записываем его в файл
    open (FH,"
    ".$localFile);
    print FH 
    $result;
    close (FH);
    Что он делает логинится на сайт, и вытаскивает тело сообщения, конвертирует его в UTF-8 (мне с ним удобнее работать) и сохраняет его в файл ./store.htm
    Скритпу нужно скормить в качестве параметра урл с nnm.ru с сылкой на конкретную новость которую нужно выкачать.
    Выполняются только требования:
    Яваскрипт не обрабатывается.
     
  9. VictorVi

    VictorVi Прохожие

    Если первый раз про это слышишь, то нехрен наpывать это гавном. Сначало посмотри, а потом говори. Во вторых, зачем писать что-то свое когда можно доработать другое? Я раньше тоже выпендривался и говорил, что надо писать все самому, пока навонец не понял, что мое время дороже и решения не всегда оптимальны.
    PHP:
    include "Snoopy.class.php";
    $snoopy = new Snoopy;
    $submit_url "http://site/auth.php";
    $submit_vars["login"] = "vasa";
    $submit_vars["pass"] = "123456";
    if(
    $snoopy->submit($submit_url,$submit_vars))
    {
        while(list(
    $key,$val) = each($snoopy->headers))
        echo 
    $key.": ".$val."<br>\n";
        echo 
    "<p>\n";
        echo 
    "<PRE>".htmlspecialchars($snoopy->results)."</PRE>\n";
    } else
        echo 
    "error fetching document: ".$snoopy->error."\n";
    P.S. Хотя любой "левый" класс треубет доработки и интеграции под конкретное решение, но это все равно легче чем писать его с нуля.
     
  10. linefeed

    linefeed Постоялец

    Регистр.:
    1 апр 2007
    Сообщения:
    101
    Симпатии:
    98
    Используй CURL. Там есть все и более чем надо.
    Если пишешь на php - хttp://www.php.net/curl
    Почитай доку... Если будут проблемы - спрашивай, помогу.
     
Статус темы:
Закрыта.