У меня есть PHP-скрипт, который очищает сеть и вставляет очищенные данные в базу данных с помощью PhantomJS.
В настоящее время по истечении времени ожидания ресурса в PhantomJS я отменяю весь запрос страницы и снова запрашиваю всю страницу через PHP.
Вот мой код:
page.settings.resourceTimeout = 5000; // 5 seconds
page.onResourceTimeout = function(e) {
console.log(e.errorCode); // it'll probably be 408
console.log(e.errorString); // it'll probably be 'Network timeout on resource'
console.log(e.url); // the url whose request timed out
phantom.exit(1);
};
Я хочу только повторно отправить запрос ресурсу, который истек, и не запрашивать всю страницу заново.
Это возможно?
Вы можете повторно отправить запрос (GET), но это не сильно вам поможет, потому что причина запроса другая.
Запросы ресурсов произойдет автоматически, когда, например, ссылка на файл JavaScript в <script>
тег. Вы можете скачать его с PhantomJS через XHR, но вполне вероятно, что другие скрипты, которые от него зависят, уже пытались запустить и не смогли. Вы должны были бы повторно запустить их все снова. Это действительно утомительно.
Другие ресурсы, такие как файлы CSS или изображения, не зависят от времени и могут быть загружены повторно. Но когда вы это сделаете, вы должны вставить их в нужное место. Давайте возьмем файл CSS для примера.
page.evaluate
Перезвоните.XHR-запросы явно отправлены через страницу. Таким образом, у каждого запроса есть обратный вызов финиша / ошибки. Вы не можете получить доступ к этим обратным вызовам извне, поэтому повторные запросы не будут работать, потому что действия, которые происходят после этих запросов, не будут вызываться.
Вы можете запустить PhantomJS с --disk-cache=true
вариант, так что для повторного запуска запроса страницы требуется меньше времени.
Других решений пока нет …