【问题标题】:get website correct source with php curl [closed]使用 php curl 获取网站正确的源代码 [关闭]
【发布时间】:2012-11-01 20:49:16
【问题描述】:

我编写了一个简单的 PHP 脚本来使用 CURL 获取网站的源代码:

function file_get_contents_curl($url)
{
$ch = curl_init();

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/curl/cacert.pem");

$data = curl_exec($ch);
$url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if($data === false)
    return false;
return array("content" => $data, "url" => $url, "httpcode" => $httpcode);
}

$data = file_get_contents_curl("https://www.facebook.com");

print_r($data);

在此示例中,我正在获取 facebook 源代码,但它获取的是与不受支持的浏览器相关的页面。实际上重定向后的最终 URL 是这样的:http://www.facebook.com/unsupportedbrowser

有什么问题?

【问题讨论】:

  • Facebook 不代表你的浏览器。它的意思是卷曲
  • 您意识到是 CURL 发出了这个请求,而不是您的浏览器? facebook 进行浏览器检测/重定向,但无法识别 curl。
  • 为什么要投反对票?仅仅因为我提到了我的浏览器?请告诉我不投票的解决方案...
  • @hakre - 这并不是那个问题的真正副本,首先那个问题是用 Ruby 编写的,其次,他们 设置了用户代理,但作为 @ 987654322@ 而不是 User-Agent
  • 如果我错了,请纠正我,但这是一个问答网站,对吧?仅仅因为这对您来说是一个微不足道的问题并不意味着这是一个糟糕的问题。

标签: php facebook curl web-crawler


【解决方案1】:

您必须使用 cURL 设置用户代理,以便 Facebook 识别它,如下所示:

$ua = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.16 (KHTML, like Gecko) \ 
Chrome/24.0.1304.0 Safari/537.16'
curl_setopt($ch, CURLOPT_USERAGENT, $ua);

【讨论】:

  • 您可以将用户代理 ($ua) 设置为任何现代浏览器的用户代理,此代码中的只是一个示例(来自我的浏览器)。
  • 非常感谢。回答问题的用户必须受到赞赏,而不是让选民和抱怨者失望......
【解决方案2】:

问题在于 cURL。

即使您通过浏览器运行脚本,服务器也会发出 cURL 请求,这意味着向目标站点发出的请求是原始的,没有任何客户端信息。

我建议你在谷歌上搜索一些关于如何让你的 curl 伪装成人类的信息,但实际上你应该从发送一个正确的 User-Agent 标头信息以及你的请求开始。

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2017-09-12
    相关资源
    最近更新 更多