php - 通过curl匿名从twitter或facebook获取页面

标签 php facebook curl twitter anonymous

我正在尝试制作某种页面解析器(更具体 - 突出显示页面上的某些单词),但我遇到了一些问题。我使用curl 从 url 获取整个页面数据,大多数页面都能很好地配合,而其他页面则不然。

我的目标是获取所有页面 html,就像浏览器获取它一样,并且我尝试匿名使用它 - 就像浏览器一样。我的意思是 - 如果某些页面需要登录才能显示我不感兴趣的浏览器数据。问题是我无法访问可以从常规浏览器匿名访问的 Twitter 或 Facebook 页面,即使我设置了所有 header ,就像它们通常从 Firefox 或 Chrome 发送的那样。

有什么方法可以简单地模拟浏览器从这些端获取页面,或者我必须使用 OAuth(有人可以解释为什么浏览器不需要使用它)吗?

编辑 我得到了解决方案!如果有人遇到问题,你应该:
-> 尝试将协议(protocol)从 https 切换到 http
-> 如果 url 中有/#!/元素,则去掉
-> 对于我的curl 元素“Accept-Encoding: gzip, deflate”也引起了问题..不知道为什么,但现在一切正常

我的代码:

if (substr($this->url,0,5) == 'https')
        $this->url = str_replace('https://', 'http://', $this->url);

    $this->url = str_replace('/#!/', '/', $this->url);

    //check, if a valid url is provided
    if(!filter_var($this->url, FILTER_VALIDATE_URL))
        return false;

    $curl = curl_init();

    $header = array();
    $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
    $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
    // -> gives an error: $header[] = "Accept-Encoding: gzip, deflate";
    $header[] = "Accept-Language: pl,en-us;q=0.7,en;q=0.3";
    $header[] = "Cache-Control: max-age=0";
    $header[] = "Connection: keep-alive";
    $header[] = "Keep-Alive: 300";
    $header[] = "Pragma: "; // browsers keep this blank. 
    curl_setopt($curl, CURLOPT_HTTPHEADER,$header);
    curl_setopt($curl, CURLOPT_HEADER, false);

    curl_setopt($curl, CURLOPT_URL, $this->url);

    curl_setopt($curl, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($curl, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT,10);
    curl_setopt($curl, CURLOPT_COOKIESESSION,true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)');
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);

    $response = curl_exec($curl);
    curl_close($curl);

    if ($response) return $response;

    return false;

所有内容都在类里面,但您可以轻松提取代码。对我来说,两者(twitter 和 facebook)都很好。

最佳答案

是的,可以模拟浏览器:但您需要仔细观察浏览器发送的所有 http header (包括 cookie),并处理重定向。其中一些可以通过 cUrl 函数“自动化”,其余的您需要手动处理。

注意:我不是在谈论代码中的 HTML header ;而是在讨论 HTML header 。这些是浏览器发送和接收的 HTTP header 。

发现这些的最简单方法是使用 fiddler来监控流量。选择一个 URL 并在右侧查找“检查元素”,您将看到发送的 header 和接收的 header 。

Facebook 通过 iFrame 使这一切变得更加复杂,所以我建议您从一个更简单的网站开始!

关于php - 通过curl匿名从twitter或facebook获取页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13911277/

相关文章:

php - 如何在单独的表中分离 PDO 查询结果和回显

php - 正确的mysql查询来查询一个表并为另一个表查询提供信息

facebook - 通过 Nodejs 的 TLS Socket 连接

linux - curl 或读取每一行 url 文本文件,然后将每一行输出到标记为连续数字的单独文件 - 1 2 3 等

php - 使用 curl 启用 GSS 协商

php - 使用预哈希密码批量导入 wordpress 用户

PHP分割文本区域的内容并插入到mysql中

php - facebook 聊天 api - php

Facebook 图片 uploader (粉丝专页)

php - 如何获取 curl exec 响应