使用 PHP cURL 获取外部 SVG 对象
Getting external SVG object using PHP cURL
我正在尝试在我的网页上显示服务器状态,该服务器状态显示为 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 整天的很多选择,现在我真的不知道该怎么做。
这个 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 元素,您应该能够 select 它们 $elements = $xpath->query("//*[name()='svg']");
。
我正在尝试在我的网页上显示服务器状态,该服务器状态显示为 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 整天的很多选择,现在我真的不知道该怎么做。
这个 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 元素,您应该能够 select 它们 $elements = $xpath->query("//*[name()='svg']");
。