使用 file_get_contents 获取 og:image 元数据在某些网站上抛出 "failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden"
Using file_get_contents to get og:image meta data throws "failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden" with some websites
我正在尝试使用 php 获取元数据,例如 og:image、标题或描述。
我正在使用该代码:
<?php
$sites_html = file_get_contents($url);
$html = new DOMDocument();
@$html->loadHTML($sites_html);
$meta_og_img = null;
//Get all meta tags and loop through them.
foreach($html->getElementsByTagName('meta') as $meta) {
//If the property attribute of the meta tag is og:image
if($meta->getAttribute('property')=='og:image'){
//Assign the value from content attribute to $meta_og_img
$meta_og_img = $meta->getAttribute('content');
}
}
echo $meta_og_img;
?>
当我使用此 url (https://www.elmundo.es/papel/2019/01/28/5c4ed8effc6c83d2718b4605.html) it works perfectly but when I use this one (https://andresmartin.org/2016/09/mindfulness-la-fibromialgia-mirar-dolor-amabilidad-alivia-malestar-reduce-dolor/) 时,出现错误。
如何避免这个错误?如果无法做到,我如何通过其他方法获取元数据?
我认为这并不重要,但我正在使用 laravel。
编辑:这是错误的屏幕截图 https://pasteboard.co/HYPI7KV.png
终于找到方法了
我补充了:
$context = stream_context_create(
array(
"http" => array(
"header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
)
)
);
$sites_html = file_get_contents('https://andresmartin.org/2016/09/mindfulness-la-fibromialgia-mirar-dolor-amabilidad-alivia-malestar-reduce-dolor/', false, $context);
现在可以正常使用了。
我正在尝试使用 php 获取元数据,例如 og:image、标题或描述。
我正在使用该代码:
<?php
$sites_html = file_get_contents($url);
$html = new DOMDocument();
@$html->loadHTML($sites_html);
$meta_og_img = null;
//Get all meta tags and loop through them.
foreach($html->getElementsByTagName('meta') as $meta) {
//If the property attribute of the meta tag is og:image
if($meta->getAttribute('property')=='og:image'){
//Assign the value from content attribute to $meta_og_img
$meta_og_img = $meta->getAttribute('content');
}
}
echo $meta_og_img;
?>
当我使用此 url (https://www.elmundo.es/papel/2019/01/28/5c4ed8effc6c83d2718b4605.html) it works perfectly but when I use this one (https://andresmartin.org/2016/09/mindfulness-la-fibromialgia-mirar-dolor-amabilidad-alivia-malestar-reduce-dolor/) 时,出现错误。
如何避免这个错误?如果无法做到,我如何通过其他方法获取元数据?
我认为这并不重要,但我正在使用 laravel。
编辑:这是错误的屏幕截图 https://pasteboard.co/HYPI7KV.png
终于找到方法了
我补充了:
$context = stream_context_create(
array(
"http" => array(
"header" => "User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36"
)
)
);
$sites_html = file_get_contents('https://andresmartin.org/2016/09/mindfulness-la-fibromialgia-mirar-dolor-amabilidad-alivia-malestar-reduce-dolor/', false, $context);
现在可以正常使用了。