php
  • curl
  • instagram
  • 2017-01-09 4 views 2 likes 
    2
    include_once('simple_html_dom.php'); 
    
        $usuario = "username"; 
        $password = "password"; 
    
        $url = 'https://www.instagram.com/'; 
        $url_login = 'https://www.instagram.com/accounts/login/ajax/'; 
        $user_agent = array("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 ", 
            "(KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36"); 
    
        $ch = curl_init(); 
    
        $headers = [ 
        'Accept-Encoding: gzip, deflate', 
        'Accept-Language: en-US;q=0.6,en;q=0.4', 
        'Connection: keep-alive', 
        'Content-Length: 0', 
        'Host: www.instagram.com', 
        'Origin: https://www.instagram.com', 
        'Referer: https://www.instagram.com/', 
        'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36', 
        'X-Instagram-AJAX: 1', 
        'X-Requested-With: XMLHttpRequest' 
        ]; 
    
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
        curl_setopt($ch, CURLOPT_URL, $url); 
    
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
        curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
        curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookie/pruebalogininsta2.txt"); 
        curl_setopt($ch, CURLOPT_REFERER, $sTarget); 
        curl_setopt($ch, CURLOPT_HEADER, TRUE); 
    
        $html = curl_exec($ch); 
    
        preg_match_all('/^Set-Cookie:\s*([^;]*)/mi', $html, $matches); 
        $cookies = array(); 
        foreach($matches[1] as $item) { 
         parse_str($item, $cookie); 
         $cookies = array_merge($cookies, $cookie); 
        } 
    
    
        $headers = [ 
        'Accept-Encoding: gzip, deflate', 
        //'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4', 
        'Accept-Language: en-US;q=0.6,en;q=0.4', 
        'Connection: keep-alive', 
        'Content-Length: 0', 
        'Host: www.instagram.com', 
        'Origin: https://www.instagram.com', 
        'Referer: https://www.instagram.com/', 
        'User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.103 Safari/537.36', 
        'X-Instagram-AJAX: 1', 
        'X-Requested-With: XMLHttpRequest' 
        ]; 
    
        $cadena_agregar_vector = 'X-CSRFToken:'. $cookies["csrftoken"]; 
    
        $headers[] = $cadena_agregar_vector ; 
    
        $sPost = "username=".$usuario . "&password=". $password ; 
    
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
        curl_setopt($ch, CURLOPT_POSTFIELDS, $sPost); 
        curl_setopt($ch, CURLOPT_URL, $url_login); 
    
        $html2 = curl_exec($ch); 
    
        curl_setopt($ch, CURLOPT_URL, "http://www.instagram.com/"); 
    
        $html4 = curl_exec($ch); 
    
        echo $html4; 
    

    это то, что я получаю enter image description herePHP локон к Instagram возвращает нечетное результат

    ответ

    1

    проблема как вы жёстко Accept-Encoding: gzip, deflate, это делает завиток посылает заголовок кодирования на самом деле, но не включить функцию декодирования из curl, таким образом, вы получаете исходные данные, без завивки, которые вы хотите использовать.

    удалить 'Accept-Encoding: gzip, deflate' и добавить curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');, и локон будет декодировать его для вас (при условии, что ротор собран с GZIP & поддержки выкачать) - или еще лучше, просто сделать curl_setopt($ch, CURLOPT_ENCODING, '');, и локон будет автоматически список всех поддерживаемых кодировок, так что вы не запускайте проблему с кодировкой, где curl не скомпилирован с поддержкой gzip.

    на несвязанной ноте, вы, вероятно, захотите использовать CURLOPT_USERAGENT, а не вручную задать заголовок пользовательского агента. иначе строка UA будет отправлена ​​с этим 1 запросом и будет сброшена при следующем запросе, тогда как CURLOPT_USERAGENT будет сохранен до тех пор, пока curl_close ($ ch)

    изменить: при первой ревизии этого сообщения я написал CURLOPT_POSTFIELDS вместо CURLOPT_ENCODING, извините, исправлено, что

    отредактируйте 2: на другом несвязанном примечании вы неправильно кодируете имя пользователя/пароль. вместо $sPost = "username=".$usuario . "&password=". $password ;, делать $sPost=http_build_query(array('username'=>$usuario,'password'=>$password));, остальные счета & или = или NULL-в пароле или имени пользователя не будет работать должным образом

    +0

    Я не понял, что вы имели в виду с «учетными записями else с помощью & or = или NULL в пароле или имени пользователя, которые не будут работать правильно»? Можете ли вы рассказать об этом по-другому? – Pablo

    +0

    @Pablo сделать учетную запись с паролем 'Adam & Eve = Human', и вы увидите, что я имею в виду. он попытается войти в систему с неправильным паролем, потому что '&' и '=' неправильно закодированы. правильная кодировка, как вам сообщила http_build_query, на самом деле 'Adam% 26Eve% 3DHuman' – hanshenrik

    +0

    ahh Я понимаю сейчас, спасибо! – Pablo

    1

    Ответ отправленного @hanshenrik действительно должен быть принят. Но если вы просто хотите, чтобы легкое решение работало и не было неправильным, удалите 'Accept-Encoding: gzip, deflate' из массива заголовков.

     Смежные вопросы

    • Нет связанных вопросов^_^