如果服务器拒绝访问,如何提取 PHP 中的元标记?

How to extract meta tags in PHP if server denies access?

过去有很多关于这个的讨论。但是事情发生了很大的变化。例如在这个问题中

Get title of website via link

其中有许多解决方案在过去有效,但现在当我检查

等网站时不起作用

https://webdesign.tutsplus.com/articles/the-complete-beginners-guide-to-chinese-fonts--cms-23444

我尝试了上述 SO 讨论中提到的所有方法,none 为此 url 工作。但后来我在这个页面上尝试了同样的方法,他们得到了页面的标题。

http://tools.buzzstream.com/meta-tag-extractor

他们是怎么做到的?如果不使用PHP,那么如何在php中完成呢?请提出除上述 SO 讨论中提到的内容以外的答案,并尝试了 tutsplus 网站的所有这些工作 none。 DOMXPATH、file_get_contents()、cURL 或添加浏览器 header 无效。

对我来说很管用 (-;

在这种情况下,有必要设置 USER_AGENT,因为如果您发送没有 USER_AGENT 的请求,那么响应是 HTTP request failed! HTTP/1.1 403 Forbidden.

P.S。始终检查错误和响应 (-;

<?php
function get_title($url){
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, $url);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($c, CURLOPT_USERAGENT, 'Linux / Firefox 29: Mozilla/5.0 (X11; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0');

    $str = curl_exec($c);
    if(strlen($str)>0){
        $str = trim(preg_replace('/\s+/', ' ', $str)); // supports line breaks inside <title>
        preg_match("/\<title\>(.*)\<\/title\>/i",$str,$title); // ignore case
        return $title[1];
    }
}
//Example:
echo get_title("https://webdesign.tutsplus.com/articles/the-complete-beginners-guide-to-chinese-fonts--cms-23444");