问题描述
亲爱的朋友们,我正在尝试制作一个有趣的项目,我们可以输入一个 Tor .onion 地址并找到与之相关的网站标题和元描述。所以这是我的代码,
<?PHP
$ch = curl_init('http://torchdeedp3i2jigzjdmfpn5ttjhthh5wbmda2rr3jvqjg5p77c54dqd.onion');
curl_setopt_array($ch,[
CURLOPT_RETURNTRANSFER => 1,CURLOPT_PROXYTYPE => CURLPROXY_SOCKS5_HOSTNAME,CURLOPT_PROXY => '127.0.0.1:9150',CURLOPT_HEADER => 0,CURLOPT_FOLLOWLOCATION => 1,CURLOPT_ENCODING => '',CURLOPT_COOKIEFILE => '',]);
$response = curl_exec($ch);
if ($response === false) {
echo sprintf(
"Request Failed. Error (%d) - %s\n",curl_errno($ch),curl_error($ch)
);
exit;
}
if (preg_match('/\<title\>(.*)\<\/title\>/i',$response,$match)) {
echo "The title is '{$match[1]}'";
} else {
echo "Did not find title in page.";
}
echo "<br></br><br>";
$tags = get_Meta_tags($response);
echo $tags['description']; // a PHP manual
?>
实际上我正确地得到了网站的标题。但是当我要获取 .onion 网站的元描述时,我的问题就出现了。这是屏幕截图enter image description here
解决方法
您可以使用 DOMDocument 进行数据解析(我已经在我的服务器上进行了测试并且可以正常工作):
请更换:
$tags = get_meta_tags($response);
echo $tags['description']; // a php manual
由
//parsing begins here:
$doc = new DOMDocument();
@$doc->loadHTML($response);
$metas = $doc->getElementsByTagName('meta');
for ($i = 0; $i < $metas->length; $i++)
{
$meta = $metas->item($i);
if(strtolower($meta->getAttribute('name')) == 'description')
$description = $meta->getAttribute('content');
if(strtolower($meta->getAttribute('name')) == 'keywords')
$keywords = $meta->getAttribute('content');
}
echo "Description: $description". '<br/><br/>';
echo "Keywords: $keywords";