Авторизация на вордпрессе курлом

Тема в разделе "PHP", создана пользователем phillip, 28 окт 2009.

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

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    Пробую авторизоваться на вордпрессе- ничего не выходит. алгоритм такой-
    1)курлом вытаскиваем страницу адрес_блога/wp-login.php
    2)выпарсиваем hidden значения и помещаем в массив $query, добавляем в этот же массив элементы с логином и пассом
    PHP:
    $query['log']= $login;
    $query['pwd']= $pass;
    3) отправляем POST запрос на страницу адрес_блога/wp-login.php

    результат- нифига. проверьте, пожалуйста, у себя. Или подскажите где я ошибся. спасибо
    PHP:
    <?php
    //header('Content-Type: text/plain');

    $blog'http://charliestories.blogvis.com/';
    $login'charlie';
    $pass'TmsFCd0d8qu1';
    echo 
    blogvis_posting($blog$login$pass);

    function 
    blogvis_posting($blog_url$login$pass){
    $avtorize_page$blog_url.'wp-login.php';

      
    $agent 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7'
      
    $header[] = "Accept: text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5" 
      
    $header[] = "Accept_charset: windows-1251, utf-8, utf-16;q=0.6, *;q=0.1"
      
    $header[] = "Accept_encoding: identity"
      
    $header[] = "Accept_language: en-us,en;q=0.5"
      
    $header[] = "Connection: close"
      
    $header[] = "Cache-Control: no-store, no-cache, must-revalidate"
      
    $header[] = "Keep_alive: 300"
      
    $header[] = "Expires: Thu, 01 Jan 1970 00:00:01 GMT"


        
    // GO TO Avtorize PAGE
      
    $ch curl_init();  
      
    curl_setopt($chCURLOPT_URL$avtorize_page); 
      
    curl_setopt($chCURLOPT_HEADER1); 
      
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
      
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);  
      
    curl_setopt($chCURLOPT_TIMEOUT10); 
      
    curl_setopt ($chCURLOPT_SSL_VERIFYPEERFALSE);  
      
    curl_setopt $ch CURLOPT_USERAGENT $agent); 
      
    curl_setopt $ch CURLOPT_HTTPHEADER $header); 
      
    $result curl_exec($ch); 
      
    curl_close($ch); 
     
      
    preg_match_all('&<input.+type=\"hidden\".+>&iU'$result$inputs);

    $query = array();
    foreach (
    $inputs[0] as $input) {
    preg_match('&<input.+type=\"hidden\".+name=\"(.+)\".+value=\"(.+)\".+>&iU'$input$inp);
    if (isset(
    $inp[1])) {
    if (isset(
    $inp[2])) $query[$inp[1]]=$inp[2]; else $query[$inp[1]]='';
    }
    }
        
    $query['log']= $login;
        
    $query['pwd']= $pass;
        
    print_r($query);
    }


      
    $ch curl_init();  
      
    curl_setopt($chCURLOPT_URL,$avtorize_page);  
      
    curl_setopt($chCURLOPT_HEADER1); 
      
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
      
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);  
      
    curl_setopt($chCURLOPT_TIMEOUT30); 
      
    curl_setopt ($chCURLOPT_SSL_VERIFYPEERFALSE);  
      
    curl_setopt($chCURLOPT_POST1); 
      
    curl_setopt($chCURLOPT_POSTFIELDS$query); 
      
    curl_setopt $ch CURLOPT_USERAGENT $agent); 
      
    curl_setopt $ch CURLOPT_HTTPHEADER $header); 
      
    curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); 
      
    curl_setopt($chCURLOPT_COOKIEFILE'cookie.txt'); 
      
    $result curl_exec($ch); 
      
    curl_close($ch);  
      echo 
    $result;
    ?>
     
  2. potuga

    potuga

    Регистр.:
    22 сен 2009
    Сообщения:
    376
    Симпатии:
    91
    Вот что должно отсылаться при авторизации:

    PHP:
    log    admin
    pwd    admin
    wp
    -submit    Log In
    redirect_to    http
    ://твой_урл/wp-admin/
    testcookie    1
    Проверь, так ли? У тебя не отсылается wp-submit Log In сейчас.

    Плюс, проверь, правильно ли парсятся hidden поля. Выведи строку с запросом перед отправкой

    А, вон у тебя print_r, что выводит?
     
  3. rex1963

    rex1963

    Регистр.:
    19 фев 2007
    Сообщения:
    228
    Симпатии:
    47
    А почему не передаешь все поля формы:
    wp-submit = Log In, rememberme = forever;
     
    phillip нравится это.
  4. potuga

    potuga

    Регистр.:
    22 сен 2009
    Сообщения:
    376
    Симпатии:
    91
    А, собсно, авторизация, оказывается и без всех полей проходит.

    Ты сам в своем коде запутался... Советую научиться писать нормально, я уж не говорю, что б другим понятно было... Хотя бы, что б сам понимал, где функция кончается...

    PHP:
    <?php

    //Функция логина в WP
    function blogvis_posting($blog_url$login$pass){
        
    $avtorize_page$blog_url.'wp-login.php';

        
    $agent 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7'
        
    $header[] = "Accept: text/html;q=0.9, text/plain;q=0.8, image/png, */*;q=0.5" 
        
    $header[] = "Accept_charset: windows-1251, utf-8, utf-16;q=0.6, *;q=0.1"
        
    $header[] = "Accept_encoding: identity"
        
    $header[] = "Accept_language: en-us,en;q=0.5"
        
    $header[] = "Connection: close"
        
    $header[] = "Cache-Control: no-store, no-cache, must-revalidate"
        
    $header[] = "Keep_alive: 300"
        
    $header[] = "Expires: Thu, 01 Jan 1970 00:00:01 GMT"

        
    //Заходим на страницу авторизации
        
    $ch curl_init();  
        
    curl_setopt($chCURLOPT_URL$avtorize_page); 
        
    curl_setopt($chCURLOPT_HEADER1); 
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);  
        
    curl_setopt($chCURLOPT_TIMEOUT10); 
        
    curl_setopt ($chCURLOPT_SSL_VERIFYPEERFALSE);  
        
    curl_setopt $ch CURLOPT_USERAGENT $agent); 
        
    curl_setopt $ch CURLOPT_HTTPHEADER $header); 
        
    $result curl_exec($ch); 
        
    curl_close($ch);  
      
        
    //Грабим поля формы
        
    preg_match_all('&<input.+type=\"hidden\".+>&iU'$result$inputs);
        
    $query = array();
        foreach (
    $inputs[0] as $input) {
            
    preg_match('&<input.+type=\"hidden\".+name=\"(.+)\".+value=\"(.+)\".+>&iU'$input$inp);
            if (isset(
    $inp[1]))
                if (isset(
    $inp[2])) $query[$inp[1]]=$inp[2]; else $query[$inp[1]]='';
        }
        
    $query['log']= $login;
        
    $query['pwd']= $pass;

        
    //Авторизируемся
        
    $ch curl_init();  
        
    curl_setopt($chCURLOPT_URL,$avtorize_page);  
        
    curl_setopt($chCURLOPT_HEADER1); 
        
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); 
        
    curl_setopt($chCURLOPT_RETURNTRANSFER,1);  
        
    curl_setopt($chCURLOPT_TIMEOUT30); 
        
    curl_setopt ($chCURLOPT_SSL_VERIFYPEERFALSE);  
        
    curl_setopt($chCURLOPT_POST1); 
        
    curl_setopt($chCURLOPT_POSTFIELDS$query); 
        
    curl_setopt $ch CURLOPT_USERAGENT $agent); 
        
    curl_setopt $ch CURLOPT_HTTPHEADER $header); 
        
    curl_setopt($chCURLOPT_COOKIEJAR'cookie.txt'); 
        
    curl_setopt($chCURLOPT_COOKIEFILE'cookie.txt'); 
        
    $result curl_exec($ch); 
        
    curl_close($ch);  
        echo 
    $result;
    }

    $blog 'http://charliestories.blogvis.com/';
    $login 'charlie';
    $pass 'TmsFCd0d8qu1';

    blogvis_posting($blog$login$pass);
     
    phillip нравится это.
  5. satih

    satih

    Регистр.:
    19 сен 2008
    Сообщения:
    429
    Симпатии:
    710
    Зачем
    PHP:
    curl_setopt($chCURLOPT_TIMEOUT10);
    ты ж даже не через прокси работаешь. Многие страницы могут просто не успеть загрузится.
     
    phillip нравится это.
  6. phillip

    phillip

    Регистр.:
    4 сен 2007
    Сообщения:
    413
    Симпатии:
    15
    в своем коде разобраться ВСЕГДА могу. и не думаю что даже вам там что-то было неясно! :)
    про wp-submit = Log In заранее знал что это необязательный параметр, ибо проверил перехватчиком данных.
    просто переработал и устал, вот и результат. Спасибо всем за ответы. curl_setopt($ch, CURLOPT_TIMEOUT, 10); действительно, надо сделать поболее))
     
Статус темы:
Закрыта.