У меня есть серверное приложение, которое будет запускать некоторые долгоиграющие PHP-скрипты в фоновом режиме через CLI. Одним из них является простой паук, который просматривает список веб-сайтов и извлекает их содержимое с помощью cURL.
Когда функция, выполняющая работу, является частью страницы, к которой обращается браузер, она работает нормально. Когда я добавляю работу к PHP-скрипту, работающему в CLI, сайты, скрывающиеся за cloudflare, не могут указать «Пожалуйста, включите куки». и затем вдаваясь в подробности, что я заблокирован.
Это функция PHP:
static function getPage($url, $timeout = 5)
{
$agent= 'Mozilla/5.0 (compatible; SimpleSpiderBot/0.1; +'.url('/').')';
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
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);
return $html;
}
Что меня смущает, так это то, что PHP выполняет всю работу одинаково, отличается только среда PHP (CLI и Apache-запрос). Я попытался настроить команду PHP CLI на использование того же файла PHP.ini, что и на странице, но это не сработало.
Редактировать: Код обработки cookie был добавлен, но когда это не помогло решить проблему, я удалил лишний код для ясности.