Господа, может быть у кого нибудь есть готовое решение, как авторизироваться в инстаграм с помощью 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]);
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/", запросы легче == скорость выше.
Сделал как Вы сказали с передачей в заголовке, сервер начал отдавать 302 Уважаемый, если Вы утверждаете, что легче сделать через /accounts/login/ajax не могли бы Вы показать на примере, т.к. это мой первый опыт авторизации на ресурсах таким способом, и хотелось бы для более понятного рассмотрения рабочий пример с обхяснениями, конечно если это Вас не затруднит.
Все правильно. 302 - редирект в случае успешной авторизации. Я имел ввиду меньший объем передаваемой информации по сравнению с обычной авторизацией. Сложность (точнее простота) реализации та же.
А вот в cookies.txt я получил пачку куков, как их правильно скормить браузеру, чтобы instagram думал что я уже залогинен?
Что тогда я делаю ни так? 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');
Не записывает в браузер полученные куки, чтобы после работы скрипта я заходил в этом же браузере на instagram.com и был уже залогинен там.
Вот кстати можешь посмотреть 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
Получил я все куки который insta отдал, как их теперь скормить браузеру, чтобы insta думал, что пользователь уже авторизирован.
Причем тут браузер и php? Если куки из курла нужны в браузере, то вручную их прописывай в браузер. Ты явно путаешь мягкое с теплым. Ошибки могли повалиться только если ты не запустил composer install, там подтягивается внешний Curl класс + используется autoloader композера.
Тогда задам вопрос по другому, возможно натолкнешь на мысль или подскажешь решение. Есть скрипт который работает с API, нужно реализовать в нем смену аккаунтов, так сказать без ручного вмешательства, чтобы лайкал сутками, т.е. 1 акк достуг лимита, переключился на другой акк. Как это средствами php реализовать (переключение между акками). По поводу примера, ошибки пофиксил, но пишит теперь что логин и пасс не верный, хотя они верные)))
1) Тут надо смотреть как у тебя скрипт устроен. Я бы просто бросал исключение, и ловил его во внешнем цикле, и там же менял бы логин\пасс. Ты как-то не с той стороны подходишь к вопросу. 2) Я проверял, там все работает. Может ты как-то не так массив $data с парами логин\пароль заполнил?
1) Да скрипт устроен просто, отправляем запрос на приложение созданное в insta, инста нас отправляет обратно на ссылку, при условии что этот аккаунт авторизирован в веб версии insta, если нет, то вываливается форма авторизации (это надо как то обойти, как я понимаю сделать авторизацию через скрипт, подстановкой логина и пасс), если авторизировался скрипт пошел по списку тегов лайки ставить. 2) Пробую на винде, т.к. скрипт будет на виндовой машине работать, так вот, на квадратные скобки у меня ругался, заменил array()...может это не правильно, поправь тогда, как от ошибки на [ уйти. Да и $body у меня почему то пустое.
1) Ну так и авторизируйся ) Забирай куки после авторизации и используй их в своих запросах. 2)Там php 5.4 нужен, так как [] используются. вместо array(). Почему $body пустое я не знаю, возможно тоже из-за того что у тебя php <5.4. Еще в методе setup там куки во временный файл пишутся, я не знаю как на винде отработает путь /tmp, попробуй на свой путь заменить
1)Ну так код выше приводил, с помощью него в файл я получаю куки, а вот дальше то как их применить правильно? 2)Обновился до 5.4, теперь говорит, что CSRF token not found
1) Дак это зависит от того как ты запросы к API делаешь. В том месте где ты их делаешь указывай файл с куками и все. 2) Csrf Token Not Found - значит что не смог найти токен. Скорее всего у тебя не загружается https://instagram.com/accounts/login/ajax/ , может тебя забанили?