PHP DOM Parsing URL ничего не возвращал - PullRequest
0 голосов
/ 16 декабря 2018

Я использую этот пример кода, чтобы начать с анализа специального сайта:

<?php

# Use the Curl extension to query Google and get back a page of results
$url = "http://www.google.com";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);

# Create a DOM parser object
$dom = new DOMDocument();

# Parse the HTML from Google.
# The @ before the method call suppresses any warnings that
# loadHTML might throw because of invalid HTML in the page.
@$dom->loadHTML($html);

# Iterate over all the <a> tags
foreach($dom->getElementsByTagName('a') as $link) {
        # Show the <a href>
        echo $link->getAttribute('href');
        echo "<br />";
}
?>

Источник

Затем я изменил вышеуказанный URL-адрес на removed for privacy reasons иснова запустите скрипт, но нет, я не получил никакого вывода, но с Google-URL это будет работать.Так в чем же проблема с моим сайтом?Методы защиты позволяют избежать синтаксического анализа или страница не соответствует стандарту?Надеюсь, кто-нибудь может мне помочь.

1 Ответ

0 голосов
/ 16 декабря 2018

Похоже, что этот сайт возвращает только ответы в кодировке gzip.Поэтому вам нужно установить правильную кодировку cURL и отправить правильные заголовки кодировки:

$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_ENCODING , "gzip");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Accept-Encoding: gzip, deflate, br',
));
$html = curl_exec($ch);
curl_close($ch);

Это работает на моем конце.

...