【问题标题】:cURL and file_get_contents not working for specific URLcURL 和 file_get_contents 不适用于特定 URL
【发布时间】:2018-07-16 15:45:55
【问题描述】:

我经常使用 cURL / file_get_contents 来获取页面的源代码。 但是,有一个网站不适合我。

代码如下:

<?php 

$c = curl_init('https://plus.nl');
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($c, CURLOPT_POST, true);
//curl_setopt(... other options you want...)

$html = curl_exec($c);

if (curl_error($c))
    die(curl_error($c));

// Get the status code
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);

curl_close($c);

echo $html;


?>

在我的浏览器中,它一直在加载。当我尝试任何其他网站时,它会立即运行。 这个网站是怎么回事,它不起作用?

【问题讨论】:

    标签: php curl file-get-contents


    【解决方案1】:

    编辑: 尝试过您正在做的事情后,我实际上可以在控制台中看到错误。它比 x-frame-option 安全性要简单得多。 HTML 在加载的 HTML 的相对路径中引用 javascript 和 css。在您的情况下,加载的 HTML 来自您的网站,而不是原始 plus.nl - 因此所有对 css/javascript/images/etc 的请求 - 都导致 404(未找到)。

    原始答案(根据我的进一步调查,这不适用):最有可能的答案是 X-FRAME-OPTION 标头。基本的 html 几乎是空的;其他所有内容都是通过 javascript 加载的。他们的 X-FRAME-OPTION 标头仅允许在浏览器中的 URL 为 https:/www.plus.nl/ 时加载资产 - 在您的情况下不是,因此无法加载/执行任何动态内容。

    【讨论】:

    • 感谢您的回复。有没有办法解决这个问题?
    • 你完全误解了X-Frame-Options。他没有使用框架。
    • @MantiNL 不,没有。这正是这些标头的用途 - 这是一种安全措施。
    • @SLaks 我确实了解 x-frame-option,但在这种情况下,经过进一步调查,我可以看到问题完全不同。我相应地更新了我的答案。
    • 回复您的编辑:难道不能将这些相对路径更改为正确的位置吗?
    【解决方案2】:

    我尝试了file_get_contents,它在网站上运行。但是,它不是很有用,因为该站点正在检测缺少 javascript。使用 curl 设置用户代理也没有成功。

    我只是收到消息

    我们在网站上开发了momenteel。 De huidige pagina werkt nog niet optimaal op mobiel。

    翻译为:

    我们目前正在开发该网站。当前页面不适用于移动设备。

    所以也许你的 IP 刚刚被他们禁止了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 2011-06-03
      • 1970-01-01
      相关资源
      最近更新 更多