Сканирование веб-сайта с асинхронным контентом за логином с помощью PHP - PullRequest
0 голосов
/ 05 мая 2019

У меня есть сайт в моей локальной сети.Он спрятан за логином.Я хочу, чтобы мой PHP-код попал на этот сайт и скопировал его содержимое.Контент не публикуется сразу, он загружается только через 1-3 секунды.

Я уже понял, как войти в систему и скопировать сайт через cURL.Но он показывает только то, что было опубликовано сразу, контент, к которому я стремлюсь, добавляется через 1-3 секунды.

<?php
$url = "http://@192.168.1.101/cgi-bin/minerStatus.cgi";

$username = 'User';
$password = 'Password';

$ch = curl_init($url);
curl_setopt($ch,CURLOPT_HTTPHEADER,array('User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0'));
curl_setopt($ch, CURLOPT_USERPWD, $username . ":" . $password);  
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

if(curl_errno($ch)){
    //If an error occured, throw an Exception.
    throw new Exception(curl_error($ch));
}
echo $response;

?>

Вывод - пустые таблицы.И я ожидаю, что они будут заполнены данными, которые появятся чуть позже на этом сайте.

1 Ответ

1 голос
/ 05 мая 2019

Проблема в том, что curl просто делает HTTP-запрос и возвращает вам тело ответа. Таблица на целевой странице, вероятно, заполнена асинхронно с использованием JavaScript. У вас есть два варианта здесь:

  1. Узнайте, какие ресурсы запрашиваются, и используйте curl, чтобы получить их напрямую. Для этого откройте страницу в своем браузере и проверьте инструменты разработчика для исходящих запросов AJAX . Как только вы выяснили, какой файл на самом деле загружен, просто попросите вместо вашего $url.

  2. Используйте эмулированный / безголовый браузер для выполнения JavaScript. Если по какой-либо причине у вас не работает первый вариант, вы можете использовать безголовый браузер для имитации реальный пользователь, перемещающийся по сайту. Это позволяет использовать все возможности JavaScript. Для PHP есть отличная библиотека Symfony / Panther , которая использует веб-драйвер facebooks и работает очень хорошо. Это будет больше работы, чем первое решение, поэтому попробуйте сначала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...