使用PHP cURL获取外部SVG对象

时间:2016-07-18 12:37:59

标签: php curl svg domxpath

我试图在我的网页上显示一个显示为SVG对象的服务器状态。 (例如[http://downdetector.com/status/netflix)。

然而,我似乎无法得到它。我得到了从错误的请求错误到空对象或空div的任何内容。然而,我所取得的成功是使用cURL返回整个页面,但在尝试过滤掉其余页面并且仅打印te SVG时我摸索了。

如何让外部服务器认为我是一个浏览器,并成功地优先检索一个正常工作的SVG对象并将其打印在我的页面上?我对PHP仍然很陌生,所以对代码旁边的任何解释都会非常受欢迎。

我甚至尝试使用Simple HTML DOM,但我仍然无法获得所需的结果。

这是我目前的代码(虽然它可能仍然很乱):

<?php
    class StatusController { 

    function __construct() {
       //include('assets/simple_html_dom.php');
    }

    public function getStatus() { 
        $ch = curl_init();
                curl_setopt($ch,CURLOPT_URL,"http://downdetector.com/status/netflix");
                curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
                $output=curl_exec($ch);

                curl_close($ch);
                //print $output;    
                // $html = str_get_html($output);
                // $elem = $html->find('div[id=holder]', 0);
                // print $elem;
                // 
                $dom = new DOMDocument();
                $dom->loadHTML($output); // Returned $data from CURL request

                $xpath = new DOMXPath($dom);
                $elements = $xpath->query('*/div'); // Don't know how to fill in this query to find an ID
                echo('<pre>'.print_r($elements, true).'</pre>');
                var_dump($elements);

            } 

} 
?>

我已经在将近3天的时间内尝试了很多选项,而且我现在还不知道该怎么做。

1 个答案:

答案 0 :(得分:1)

此URL的问题在于,SVG是通过JavaScript动态加载的:

<p>Netflix offers an on-demand streaming video service through the internet as well as a flat rate DVD by mail service. </p>
          <img id='tracker' style='display: none' />
<script type='text/javascript'>
// <![CDATA[
  url = '//tracker.downdetector.com/count/company/20065.txt?ref=' + encodeURIComponent(document.referrer);
  $('#tracker')[0].src = url;
// ]]>
</script>

script部分将被SVG取代。我不能告诉你,在这种情况下如何得到它。

但是,如果您的网站包含正常嵌入的SVG元素,您应该可以通过$elements = $xpath->query("//*[name()='svg']");选择它们。