Goutte не будет загружать страницу ASP SSL
Я пробую 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. У кого-нибудь есть идеи, какие мне стоит попробовать?
2 ответа
Я обнаружил, что мой браузер и wget
оба добавляют непустое поле агента пользователя в заголовок, поэтому я предполагаю, что Гутт ничего не устанавливает здесь. Добавление этого заголовка к объекту браузера до извлечения устраняет проблему:
// 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
функция, и она работала как шарм.
Вот полный код:
// 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";