КОмпонент BrowserKit

Компонент BrowserKit симулирует поведение веб-браузера, позволяя вам программно делать запросы, нажимать на ссылки и отправлять формы.

Note

Компонент BrowserKit может делать только внутренние запросы к вашему приложению. Если вам нужно сделать запрос к внешним сайтам и приложениям, рассмотрите использование Goutte, в качестве простого веб-агрегатора, основанного на компонентах Symfony.

Установка

Вы можете установить компонент двумя способами:

Базовое применение

Создание клиента

Компонент предоставляет только абстрактного клиента, и не предоставляет готового к использованию бэк-энда для уровня HTTP.

Чтобы создать вашего собственного клиента, вам нужно расширить абстрактный класс Client и реализовать метод doRequest(). Этот метод принимает запрос и должен вернуть ответ:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
namespace Acme;

use Symfony\Component\BrowserKit\Client as BaseClient;
use Symfony\Component\BrowserKit\Response;

class Client extends BaseClient
{
    protected function doRequest($request)
    {
        // ... преобразовать запрос в ответ

        return new Response($content, $status, $headers);
    }
}

Для простой реализации браузера, основанного на слое HTTP, посмотрите на Goutte. Для реализации, основанной на HttpKernelInterface, посмотрите на Client, предоставленный компонентом HttpKernel.

Как делать запросы

Используйте метод request(), чтобы делать HTTP запросы. Первые два аргумента - HTTP метод и запрошенный URL:

1
2
3
4
use Acme\Client;

$client = new Client();
$crawler = $client->request('GET', '/');

Значение, возвращённое методом request() - это экземпляр класса Crawler, предоставленный DomCrawler component, который разрешает программный доступ и траверсирование HTML элементов.

Нажатие ссылок

Объект Crawler способен симулировать нажатие на ссылки. Для начала, передайте содержимое текста ссылки методу selectLink(), который возвращает объект Link. Далее, передайте этот объект методу click(), который выполняет необходимый HTTP запрос GET, чтобы симулировать нажатие на ссылку:

1
2
3
4
5
6
use Acme\Client;

$client = new Client();
$crawler = $client->request('GET', '/product/123');
$link = $crawler->selectLink('Go elsewhere...')->link();
$client->click($link);

Отправка форм

Объект Crawler также способен выбирать формы. Для начала, выберите любую кнопку формы методом selectButton(). Далее, используйте метод form(), чтобы выбрать форму, которой принадлежит кнопка.

После выбора формы, заполните данные и отправьте их, используя метод submit() (который делает необходимй HTTP запрос POST , чтобы отправить содержимое формы):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
use Acme\Client;

// сделайте реальный запрос ко внешнему сайту
$client = new Client();
$crawler = $client->request('GET', 'https://github.com/login');

// выберите форму и заполните некоторые значения
$form = $crawler->selectButton('Log in')->form();
$form['login'] = 'symfonyfan';
$form['password'] = 'anypass';

// Чтобы загрузить файл, значение должено быть абсолютным путём файла
$form['file'] = __FILE__;

// отправьте эту форму
$crawler = $client->submit($form);

История

Клиент хранит все ваши запросы, позволяя вам перемещаться по вашей истории вперёд и назад:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
use Acme\Client;

$client = new Client();
$client->request('GET', '/');

// выберите и нажмите на ссылку
$link = $crawler->selectLink('Documentation')->link();
$client->click($link);

// перейдите назад к домашней странице
$crawler = $client->back();

// перейдите вперёд к странице документации
$crawler = $client->forward();

Вы можете удалять историю клиента методом restart(). Это также удалит все cookie:

1
2
3
4
5
6
7
use Acme\Client;

$client = new Client();
$client->request('GET', '/');

// перезапустите клиент (история и cookie также очищаются)
$client->restart();

Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.