cURL没有加载样式/ CSS

时间:2017-02-20 21:09:44

标签: php html css curl

所以我有一个非常简单的cURL代码,应该检索页面的数据......好吧,它实际上 显示页面的内容... <强大>有时,而且,大多数其他时候风格都搞砸了,因为字体没有加载,大多数图像和图形元素都没有。如果我更改要显示的网页的网址,结果会有所不同,其中一些加载没有问题,其他人根本没有显示任何内容

我猜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之外,它甚至没有加载任何格式,有时候页面完全是空的。

2 个答案:

答案 0 :(得分:1)

当您使用curl发送http请求时,curl会将响应发送给您。 如果响应中嵌入了样式,则可以使用您浏览时不显示/使用CURL 显示此应用。 如果样式/资源在属性srchref上有完整的URI,则可以看到应用此 ON你浏览器不开/有CURL

  

Curl不是解释器HTML,JS,CSS。

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

您可能需要了解PhantomJSSelenium

另一个解决方案(太慢)是获取响应并解析它以查找所有<link>(css样式链接)以打开并获取内容并嵌入它...(我认为这是坏主意,但工作)

答案 1 :(得分:0)

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

$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_RETURNTRANSFERCURLOPT_TIMEOUT是允许cURL函数执行的最大秒数。这将为您提供一些结果/文本(字符串格式),而不是格式化为html。

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

enter image description here