POST авторизация в Instagram

Discussion in 'PHP' started by toxam9, 5 Jan 2014.

  1. toxam9

    toxam9 New Member

    Joined:
    22 May 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    Господа, может быть у кого нибудь есть готовое решение, как авторизироваться в инстаграм с помощью post php? Голову сломал как это сделать, с апи разобрался все работает, а вот чтобы сделать автоматическую смену аккаунтов, нужно логиниться на сайте.

    Вот что есть пока...но не работает, может у кого уже есть готовое решение или кто то поможет, в этом только загвоздка осталась, а доделать уже надо было вчера еще.


    Code:
    $url="https://instagram.com/accounts/login/";
    $login="sdfwefef";
    $pass="grergrgrg";
    
    $page = file_get_contents($url);
    
    
    
    $content = preg_match('<input type="hidden" name="csrfmiddlewaretoken" value="(.*?)">', $page, $found);
      
    
    function login($url,$login,$pass,$key){
       $ch = curl_init();
       if(strtolower((substr($url,0,5))=='https')) { // если соединяемся с https
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
       }
       curl_setopt($ch, CURLOPT_URL, $url);
       curl_setopt($ch, CURLOPT_REFERER, $url);
       curl_setopt($ch, CURLOPT_VERBOSE, 1);
       curl_setopt($ch, CURLOPT_POST, 1);
       curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
       curl_setopt($ch, CURLOPT_POSTFIELDS,"login=".$login."&pass=".$pass."&csrfmiddlewaretoken=".$key);
       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
       curl_setopt($ch, CURLOPT_HEADER, 1);
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
       $result=curl_exec($ch);
    
       if(strpos($result,"Location: index.php")===false) die('Login incorrect');
    
       curl_close($ch);
    
       return $result;
    }
    
     login($url,$login,$pass,$found[1]);
    
     
  2. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    csrfmiddlewaretoken в запросе не просто так. Как ему и положено, он защищает от CSRF, поэтому сверяется с токеном в куках. В заголовке передавай "Cookie: csrftoken=$key".

    Откуда взял поля "login" и "pass"? Там "username" и "password".
    Должно быть "Location: https://instagram.com/", но может быть спамблок "instagram.com/integrity/checkpoint/identity/", поэтому лучше проверяй "Set-Cookie: sessionid=".


    p.s.: есть еще авторизация через "/accounts/login/ajax/", запросы легче == скорость выше.
     
  3. toxam9

    toxam9 New Member

    Joined:
    22 May 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0

    Сделал как Вы сказали с передачей в заголовке, сервер начал отдавать 302

    Уважаемый, если Вы утверждаете, что легче сделать через /accounts/login/ajax не могли бы Вы показать на примере, т.к. это мой первый опыт авторизации на ресурсах таким способом, и хотелось бы для более понятного рассмотрения рабочий пример с обхяснениями, конечно если это Вас не затруднит.
     
    #3 toxam9, 5 Jan 2014
    Last edited: 5 Jan 2014
  4. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    Все правильно. 302 - редирект в случае успешной авторизации.
    Я имел ввиду меньший объем передаваемой информации по сравнению с обычной авторизацией. Сложность (точнее простота) реализации та же.
     
  5. toxam9

    toxam9 New Member

    Joined:
    22 May 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    А вот в cookies.txt я получил пачку куков, как их правильно скормить браузеру, чтобы instagram думал что я уже залогинен?
     
  6. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,581
    Likes Received:
    1,317
    Reputations:
    1,557
    CURLOPT_COOKIEJAR - куда записывать куки
    CURLOPT_COOKIEFILE - откуда читать куки
     
  7. toxam9

    toxam9 New Member

    Joined:
    22 May 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    Что тогда я делаю ни так?

    Code:
    
    curl_setopt($ch, CURLOPT_POSTFIELDS,"username=".$login."&password=".$pass."&csrfmiddlewaretoken=".$key);
       curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (Windows; U; Windows NT 5.0; En; rv:1.8.0.2) Gecko/20070306 Firefox/1.0.0.4");
       curl_setopt($ch, CURLOPT_HEADER, 1);
    
    	curl_setopt($ch, CURLOPT_COOKIE, "Cookie: csrftoken=".$key);
    
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
       curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
       curl_setopt($ch, CURLOPT_COOKIEFILE, $_SERVER['DOCUMENT_ROOT'].'/cookie.txt');
    
    
     
  8. toxam9

    toxam9 New Member

    Joined:
    22 May 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    Не записывает в браузер полученные куки, чтобы после работы скрипта я заходил в этом же браузере на instagram.com и был уже залогинен там.
     
  9. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Вот кстати можешь посмотреть https://github.com/JudyBe/JustInsta

    В index.php пример использования. Там только Login реализовано.

    Code:
    git clone https://github.com/JudyBe/JustInsta.git
    cd JustInsta
    composer install
    php -f index.php
     
  10. toxam9

    toxam9 New Member

    Joined:
    22 May 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    Готовые решения конечно хорошо, но мне хотелось бы понять, почему код выше не хочет работать.
     
  11. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Что именно не работает? Какую ошибку выдает?
     
  12. toxam9

    toxam9 New Member

    Joined:
    22 May 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    Да и повалилась куча ошибок в этом примере(((
     
  13. toxam9

    toxam9 New Member

    Joined:
    22 May 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    Получил я все куки который insta отдал, как их теперь скормить браузеру, чтобы insta думал, что пользователь уже авторизирован.
     
  14. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    Причем тут браузер и php?
    Если куки из курла нужны в браузере, то вручную их прописывай в браузер.
    Ты явно путаешь мягкое с теплым.

    Ошибки могли повалиться только если ты не запустил composer install, там подтягивается внешний Curl класс + используется autoloader композера.
     
  15. toxam9

    toxam9 New Member

    Joined:
    22 May 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0

    Тогда задам вопрос по другому, возможно натолкнешь на мысль или подскажешь решение. Есть скрипт который работает с API, нужно реализовать в нем смену аккаунтов, так сказать без ручного вмешательства, чтобы лайкал сутками, т.е. 1 акк достуг лимита, переключился на другой акк. Как это средствами php реализовать (переключение между акками).


    По поводу примера, ошибки пофиксил, но пишит теперь что логин и пасс не верный, хотя они верные)))
     
  16. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    1) Тут надо смотреть как у тебя скрипт устроен. Я бы просто бросал исключение, и ловил его во внешнем цикле, и там же менял бы логин\пасс. Ты как-то не с той стороны подходишь к вопросу.

    2) Я проверял, там все работает. Может ты как-то не так массив $data с парами логин\пароль заполнил?
     
  17. toxam9

    toxam9 New Member

    Joined:
    22 May 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    1) Да скрипт устроен просто, отправляем запрос на приложение созданное в insta, инста нас отправляет обратно на ссылку, при условии что этот аккаунт авторизирован в веб версии insta, если нет, то вываливается форма авторизации (это надо как то обойти, как я понимаю сделать авторизацию через скрипт, подстановкой логина и пасс), если авторизировался скрипт пошел по списку тегов лайки ставить.

    2)
    Пробую на винде, т.к. скрипт будет на виндовой машине работать, так вот, на квадратные скобки у меня ругался, заменил array()...может это не правильно, поправь тогда, как от ошибки на [ уйти. Да и $body у меня почему то пустое.
     
  18. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    1) Ну так и авторизируйся ) Забирай куки после авторизации и используй их в своих запросах.
    2)Там php 5.4 нужен, так как [] используются. вместо array(). Почему $body пустое я не знаю, возможно тоже из-за того что у тебя php <5.4. Еще в методе setup там куки во временный файл пишутся, я не знаю как на винде отработает путь /tmp, попробуй на свой путь заменить
     
    #18 mrDebian, 6 Jan 2014
    Last edited: 6 Jan 2014
  19. toxam9

    toxam9 New Member

    Joined:
    22 May 2009
    Messages:
    19
    Likes Received:
    0
    Reputations:
    0
    1)Ну так код выше приводил, с помощью него в файл я получаю куки, а вот дальше то как их применить правильно?

    2)Обновился до 5.4, теперь говорит, что CSRF token not found
     
  20. mrDebian

    mrDebian Member

    Joined:
    27 Jan 2013
    Messages:
    96
    Likes Received:
    13
    Reputations:
    10
    1) Дак это зависит от того как ты запросы к API делаешь. В том месте где ты их делаешь указывай файл с куками и все.
    2) Csrf Token Not Found - значит что не смог найти токен. Скорее всего у тебя не загружается https://instagram.com/accounts/login/ajax/ , может тебя забанили? :)