如何解决无法使用 PHP 通过 Tor 网络获取网站元描述
亲爱的朋友们,我正在尝试制作一个有趣的项目,我们可以输入一个 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";
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。