Я пытаюсь Goutte , веб-искатель PHP, основанный на компонентах Symfony2. Я успешно получил Google в форматах открытого текста и SSL. Однако я столкнулся с страницей ASP / SSL, которая не будет загружаться.
Вот мой код:
// Load a crawler/browser system require_once 'vendor/goutte/goutte.phar'; // Here's a demo of a page we want to parse $uri = '(removed)'; use Goutte\Client; $client = new Client(); $crawler = $client->request('GET', $uri); echo $crawler->text() . "\n";
Вместо этого эхо в конце вышеприведенного кода для этого одного сайта дает мне следующее:
Неверный запрос (неверное название заголовка)
Я прекрасно вижу сайт в Firefox, а HTML для него можно получить с помощью wget --no-check-certificate
без каких-либо других параметров (например, для настройки заголовка или пользовательского агента).
Я подозреваю, что мне нужно установить некоторые HTTP-заголовки в Goutte. Есть ли у кого-нибудь идеи какие из них я должен попробовать?
Я обнаружил, что мой браузер и wget
добавляют в поле не пустое поле агента пользователя, поэтому я предполагаю, что Goutte ничего не устанавливает. Добавление этого заголовка в объект браузера до извлечения исправляет проблему:
// Load a crawler/browser system require_once 'vendor/goutte/goutte.phar'; // Here's a demo of a page we want to parse $uri = '(removed)'; use Goutte\Client; // Set up headers $client = new Client(); $headers = array( 'User-Agent' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:21.0) Gecko/20100101 Firefox/21.0', ); foreach ($headers as $header => $value) { $client->setHeader($header, $value); } $crawler = $client->request('GET', $uri); echo $crawler->text() . "\n";
Здесь я скопировал в строке агента браузера, но в этом случае я думаю, что все будет работать – пока оно установлено.
Кстати, я использовал браузер UA здесь, поскольку я пытался точно реплицировать среду браузера для отладки этой конкретной проблемы. Как только это сработало, я переключился на пользовательский UA, поэтому целевые сайты могут обнаружить его как бота, если они захотят (для этого проекта я не думаю, что у кого-то есть).
У меня тоже были проблемы.
Недостаточно добавить заголовок User-Agent
. Я добавил HTTP_USER_AGENT
с setServerParameter
функции setServerParameter
и он работал как шарм.
Вот полный код:
// Load a crawler/browser system require_once 'vendor/goutte/goutte.phar'; // Here's a demo of a page we want to parse $uri = '(removed)'; $ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:21.0) Gecko/20100101 Firefox/21.0'; use Goutte\Client; // Set up headers $client = new Client(); $client->setHeader('User-Agent', $ua); $client->setServerParameter('HTTP_USER_AGENT', $ua); $crawler = $client->request('GET', $uri); echo $crawler->text() . "\n";