【问题标题】:cURL not loading style/csscURL 不加载样式/css
【发布时间】:2017-02-20 21:09:43
【问题描述】:

所以我有这个非常简单的 cURL 代码,应该检索页面的数据...嗯,它实际上 确实显示了页面的内容...有时,而且,大多数其他时候样式都搞砸了,因为字体没有加载,大多数图像和图形元素也没有加载。如果我更改要显示的页面的 URL,结果会有所不同,有些加载没有问题,有些则根本不显示 anything

我猜cURL如何处理css有问题,我怎样才能让它正确加载它?

<?php
    $ch = curl_init();

    $url = 'http://3amigos.com.mx/';

    curl_setopt($ch, CURLOPT_URL, $url);

    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Googlebot/2.1 (http://www.googlebot.com/bot.html)');
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1);

    $data = curl_exec($ch);

    echo $data;
?>
ABCDEF

就像现在一样,有时它甚至不加载任何内容,只加载没有任何格式的 ABCDEF,有时页面完全是空的。

【问题讨论】:

  • 也许有人知道你正在伪造用户代理并阻止你.. CSS 和 JS 除非使用绝对链接请求将失败。
  • Curl 不是解释器。如果您需要发送 http 请求并接收带有 javascript 和 css 解释的完整网站样式,您可以使用 PhantomJS。

标签: php html css curl


【解决方案1】:

当您使用 curl 发送 http 请求时,curl 会获取响应并将其提供给您。 如果响应嵌入了样式,您可以使用 YOU BROWSER NOT ON/WITH CURL 显示此应用。 但是如果样式/资源在属性 srchref 上具有完整的 URI,您可以看到应用此 在您的浏览器上未打开/使用 CURL。。 p>

Curl 不是 HTML、JS、CSS 的解释器。

Curl 只是用于使用各种协议(如 HTTP、HTTPS、...)传输数据的命令行

您可能需要了解PhantomJSSelenium

另一种解决方案(太慢)是获取响应并解析它以找到所有&lt;link&gt;(css 样式链接)以打开并获取内容并嵌入它......(我认为这很糟糕想法,但工作)

【讨论】:

  • Aw shucks...猜猜它又回到了我的绘图板上。还是谢谢。
  • 别担心。请了解 PhantomJS(我真的很喜欢这个项目)。也许你可以用这个解决你的问题。
  • 我为你写了一个可能的解决方案@lower看看我的答案
  • 谢谢你,Olaf,我会看看我能做些什么。遗憾的是,解析方法目前看来不太可行。
【解决方案2】:

你可以试试这个(检查修改后的代码):

$ch = curl_init();
$url = 'http://3amigos.com.mx/';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Googlebot/2.1 (http://www.googlebot.com/bot.html)');
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1);
//curl_setopt($ch, CURLOPT_TIMEOUT, 1); // Removed
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Added
$data = curl_exec($ch);

if($data) var_dump($data);

CURLOPT_RETURNTRANSFER 是返回/返回结果所必需的,CURLOPT_TIMEOUT 是允许 cURL 函数执行的最大秒数。这将为您提供一些结果/文本(字符串格式),而不是格式化为 html。

这是一个截断的屏幕截图,以证明它有效:

【讨论】:

  • 等等,什么?当我使用你的代码时,我仍然看到一个完全空白的页面。
  • 你是不是像我现在在答案中那样把它扔掉了?
  • 我刚做了。但是,似乎存在问题,因为并非所有数据都已转储。但是,这不适合我的需要,因为无论如何我都需要查看实际页面。还是谢谢你。
猜你喜欢
  • 2018-01-17
  • 1970-01-01
  • 2014-02-06
  • 2016-03-06
  • 2017-12-23
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多