1) Делаю вот так: Code: $url="https://instagram.com/accounts/login/"; $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,"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); //Отправляем key в заголовок 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'); $result=curl_exec($ch); //var_dump($result); if(strpos($result,"Location: https://instagram.com/")===false) die('Login incorrect'); curl_close($ch); return $result; } //print $found[1]."<br>"; login($url,$login,$pass,$found[1]); header('Location: https://api.instagram.com/oauth/authorize/?client_id='.$client_id.'&redirect_uri=http://localhost/inst/step1.php&response_type=code&scope=basic+comments+relationships+likes&client_id='.$client_id.'&client_secret='.$client_secret.''); Получаю форму для ввода логина и пароля от инстаграм. Token приложения и т.д. получил и передаю инстаграмму. Есть мысль полученные cookies с помощью curl каким то образом записывать в браузер для домена instagram.com, только вот не представляю каким образом выдрать их из файла и записать. 2) Если меняю в getCSRFToken код Code: $body = $this->curl->get($this->url)->body; preg_match("/window\._csrf_token = '(.*)';/", $body, $found); на Code: $page = file_get_contents($this->url); $content = preg_match("/window\._csrf_token = '(.*)';/", $page, $found); уже говорит что не верные логин и пароль... var_dump говорит что $body пустой...почему пустой не понятно((
1) Ты через браузер что ли все делаешь? Зачем ты перенаправляешь на https://api.instagram.com ? Ты явно что-то не то мутишь. 2) Я не представляю почему у тебя $body пустой. Поставь xdebug себе что ли, и с ним трассируй. Если $body пустой, то сервер тебе ничего не возвращает, может тебя забанили. Понатыкай везде var_dump() и смотри промежуточный вывод. Попробуй так же поменять Code: $body = $this->curl->get($this->url)->body; На Code: die(var_dump($this->curl->get($this->url))); И посмотри что скажет.
Ну куки от курла у тебя же есть? Вот и используй и дальше curl для общения через API. Я не понимаю как ты реализовал API, но не можешь реализовать логин...
Причем тут jquery вообще? Зачем он тебе? Получил куки от логина, и пошель дальше курлом запросы слать. Когда забанят, просто сменишь логин\пароль, и дальше будешь слать... Ты либо залей на гитхаб свой код, чтоб можно было в нем разобраться, либо делай как тебе говорят.
Тут 2 варианта - учить матчасть или заказать готовый скрипт в разделе "о работе". В общем, алгоритм простой, можно без curlopt_cookie(file|jar): 1) Авторизация, получение сессии. POST-запрос https://instagram.com/accounts/login/ username=ЛОГИН&password=ПАРОЛЬ&csrfmiddlewaretoken=CSRF_ТОКЕН В куках csrftoken=CSRF_ТОКЕН Парсим из ответа "^Set-Cookie: sessionid=(.+?)\;" 2) Установка приложения. Если уже установлено, получение токена авторизации. POST-запрос https://instagram.com/oauth/authorize/?client_id=ID_ПРИЛОЖЕНИЯ&redirect_uri=URI_ПРИЛОЖЕНИЯ&response_type=token&scope=relationships csrfmiddlewaretoken=CSRF_ТОКЕН&allow=Authorize В куках сессия из предыдущего пункта и csrftoken=CSRF_ТОКЕН Из ответа берем "#access_token=(.+?)$" 3) Выполняем любые запросы к API, используя access_token. Куки и аккаунты уже не нужны. access_token для каждого аккаунта постоянный, не меняется даже при смене пароля и переустановке приложения. Лимит запросов к API - 160 в час. P.S.: CSRF токены подобного типа вообще не надо парсить со страницы. Главное, чтобы в куках и теле запроса был одинаковый токен. Генерируй рандомный md5-хеш на каждый запрос и отправляй его.
Всем спасибо за советы, реализовал все задуманное с помощью CUrl. Вопрос только такой остался, как сделать визуальный лог работы скрипта? Как с Curl правильно передать на страницу выполнение? С помощью js? Ну т.е. чтобы типо писало ставим лайк такой то ID и т.д. Может пример привидете для более понятной реализации. Еще раз спасибо ребята за помощью, много для себя почерпнул.
Прочитал всю тему и не могу залогиниться в инстаграме никак. Использую perl, вот код: Code: #!/usr/bin/perl -w use strict; use LWP::UserAgent; use HTTP::Cookies; my $login = "login"; my $pass = "pass"; my $url="https://instagram.com/accounts/login/"; my $cj = HTTP::Cookies->new(file => 'cookies.txt', autosave => 1); my $ua = LWP::UserAgent->new(); $ua -> agent(agents()); $ua -> timeout(35); $ua -> default_headers($h); $ua -> cookie_jar($cj); my $result = $ua -> get( $url ) -> content; my $token; if ($result =~ /name=\"csrfmiddlewaretoken\" value\=\"(\w.*)\"/) {$token = $1;} my $resp = $ua -> post($url, ['csrfmiddlewaretoken' => $token, 'username' => $login, 'password' => $pass]); print "Token = ".$token."\n"; print $resp -> code."\n"; sub agents { my @agents = qw(Opera/9.15 Opera/9.12 Opera/8.60b IE/4.0 IE/5.0 IE/6.0 IE/7.0 Mozilla/4.0 Mozilla/5.0 Mozilla/2.0 Mozilla/3.0); return $agents[rand scalar @agents];} Выше было сказанно что необходимо в заголовке токен передавать, как это реализовать? Токен в куках и спарсенный со странице одинаковый
Поискал в своих работах проверь этот код: PHP: use LWP::UserAgent; use HTTP::Request::Common; use HTTP::Cookies; my $login = 'LOGIN'; my $password = 'PASSWORD'; my $cookie_jar = HTTP::Cookies->new(); my $ua = LWP::UserAgent->new( ssl_opts => { verify_hostname => 0 } ); $ua->timeout(10); $ua->agent( $userAgent ); $ua->cookie_jar( $cookie_jar ); my $res = $ua->get( 'https://instagram.com/accounts/login/' ); my $result = $res->content; if( $result =~ /<input type="hidden" name="csrfmiddlewaretoken" value="(.+?)"/ ) { my $token = $1; my $postString = 'csrfmiddlewaretoken='.$token.'&username='.$login.'&password='.$password; my $req = HTTP::Request->new( POST => 'https://instagram.com/accounts/login/' ); $req->content_type( 'application/x-www-form-urlencoded' ); $req->content( $postString ); $req->header( 'Accept-Language' => 'en-US,en;q=0.5' ); $req->header( 'Referer' => 'https://instagram.com/accounts/login/' ); my $res = $ua->request( $req ); my $result = $res->content; if( $res->code == '302' ) { print 'Login success'; }else { print 'Login failed'; } }