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";
Другие вопросы по тегам