【问题标题】:php curl to instagram returns odd resultphp curl到instagram返回奇怪的结果
【发布时间】:2017-01-09 11:58:14
【问题描述】:
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;

这就是我得到的

【问题讨论】:

    标签: php curl instagram


    【解决方案1】:

    问题是你硬编码Accept-Encoding: gzip, deflate的方式,这使得curl确实发送了编码头,但它没有打开curl的解码功能,因此你得到了原始数据,而不用curl为你解码。

    删除'Accept-Encoding: gzip, deflate',并添加curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');,curl会为你解码(前提是curl编译时支持gzip和deflate)——或者更好的是,只需执行curl_setopt($ch, CURLOPT_ENCODING, '');,curl会自动列出所有支持的编码,因此您不会遇到不支持 gzip 编译 curl 的编码问题。

    在不相关的注释中,您可能想要使用 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 的帐户将无法正常工作

    【讨论】:

    • 我不明白您的意思是“否则密码或用户名中带有 & 或 = 或 NULL 的帐户将无法正常工作”?你能换一种说法吗?
    • @Pablo 使用密码 Adam&Eve=Human 创建一个帐户,您就会明白我的意思。它将尝试使用错误的密码登录,因为&= 没有正确编码。 http_build_query 给你的正确编码实际上是Adam%26Eve%3DHuman
    【解决方案2】:

    @hanshenrik 发布的答案确实应该被接受。但是,如果您只想要一个可行且不正确的简单解决方案,请从 headers 数组中删除 'Accept-Encoding: gzip, deflate'

    【讨论】:

      猜你喜欢
      • 2012-08-08
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多