Использование file_get_contents для получения метаданных og: image «не удалось открыть поток: не удалось выполнить HTTP-запрос! HTTP / 1.1 403 Forbidden» на некоторых веб-сайтах - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь использовать php для получения метаданных, таких как og: image, title или description.

Я использую этот код:

<?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) работает отлично, но когда я его использую (https://andresmartin.org/2016/09/mindfulness-la-fibromialgia-mirar-dolor-amabilidad-alivia-malestar-reduce-dolor/), я получаю ошибку.

Как я могу избежать этой ошибки? И если это невозможно сделать, какя могу получить метаданные другим методом?

Я думаю, что это не важно, но я использую laravel.

РЕДАКТИРОВАТЬ: Вот скриншот ошибки https://pasteboard.co/HYPI7KV.png

1 Ответ

0 голосов
/ 30 января 2019

Наконец-то я нашел способ.

Я добавил:

$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);

Теперь все отлично работает.

...