Skip to main content

Route

Когда сетевая маршрутизация настроена с помощью page.route() или browserContext.route(), объект Route позволяет управлять маршрутом.

Узнайте больше о сетевом взаимодействии.


Методы

abort

Добавлено до v1.9 route.abort

Прерывает запрос маршрута.

Использование

await route.abort();
await route.abort(errorCode);

Аргументы

  • errorCode [string] (опционально)#

    Опциональный код ошибки. По умолчанию failed, может быть одним из следующих:

    • 'aborted' - Операция была прервана (из-за действия пользователя)
    • 'accessdenied' - Доступ к ресурсу, отличному от сети, был запрещен
    • 'addressunreachable' - IP-адрес недоступен. Обычно это означает, что нет маршрута к указанному хосту или сети.
    • 'blockedbyclient' - Клиент решил заблокировать запрос.
    • 'blockedbyresponse' - Запрос не удался, потому что ответ был доставлен с требованиями, которые не были выполнены (например, проверки 'X-Frame-Options' и 'Content-Security-Policy').
    • 'connectionaborted' - Соединение прервано из-за отсутствия ACK для отправленных данных.
    • 'connectionclosed' - Соединение было закрыто (соответствует TCP FIN).
    • 'connectionfailed' - Попытка соединения не удалась.
    • 'connectionrefused' - Попытка соединения была отклонена.
    • 'connectionreset' - Соединение было сброшено (соответствует TCP RST).
    • 'internetdisconnected' - Интернет-соединение было потеряно.
    • 'namenotresolved' - Имя хоста не удалось разрешить.
    • 'timedout' - Операция завершилась по тайм-ауту.
    • 'failed' - Произошла общая ошибка.

Возвращает

  • [Promise]<[void]>#

continue

Добавлено до v1.9 route.continue

Отправляет запрос маршрута в сеть с возможностью переопределения.

Использование

await page.route('**/*', async (route, request) => {
// Переопределение заголовков
const headers = {
...request.headers(),
foo: 'foo-value', // установить заголовок "foo"
bar: undefined, // удалить заголовок "bar"
};
await route.continue({ headers });
});

Аргументы

  • options [Object] (опционально)
    • headers [Object]<[string], [string]> (опционально)#

      Если установлено, изменяет HTTP-заголовки запроса. Значения заголовков будут преобразованы в строку.

    • method [string] (опционально)#

      Если установлено, изменяет метод запроса (например, GET или POST).

    • postData [string] | [Buffer] | [Serializable] (опционально)#

      Если установлено, изменяет данные post запроса.

    • url [string] (опционально)#

      Если установлено, изменяет URL запроса. Новый URL должен иметь тот же протокол, что и оригинальный.

Возвращает

  • [Promise]<[void]>#

Детали

Опция headers применяется как к маршрутизированному запросу, так и к любым перенаправлениям, которые он инициирует. Однако url, method и postData применяются только к оригинальному запросу и не переносятся на перенаправленные запросы.

route.continue() немедленно отправит запрос в сеть, другие соответствующие обработчики не будут вызваны. Используйте route.fallback(), если вы хотите, чтобы следующий соответствующий обработчик в цепочке был вызван.


fallback

Добавлено в: v1.23 route.fallback

Продолжает запрос маршрута с возможностью переопределения. Метод аналогичен route.continue(), с той разницей, что другие соответствующие обработчики будут вызваны перед отправкой запроса.

Использование

Когда несколько маршрутов соответствуют заданному шаблону, они выполняются в порядке, обратном их регистрации. Таким образом, последний зарегистрированный маршрут всегда может переопределить все предыдущие. В примере ниже запрос будет обработан сначала самым нижним обработчиком, затем он перейдет к предыдущему и в конце будет прерван первым зарегистрированным маршрутом.

await page.route('**/*', async route => {
// Выполняется последним.
await route.abort();
});
await page.route('**/*', async route => {
// Выполняется вторым.
await route.fallback();
});
await page.route('**/*', async route => {
// Выполняется первым.
await route.fallback();
});

Регистрация нескольких маршрутов полезна, когда вы хотите, чтобы отдельные обработчики обрабатывали разные виды запросов, например, API вызовы против ресурсов страницы или GET запросы против POST запросов, как в примере ниже.

// Обработка GET запросов.
await page.route('**/*', async route => {
if (route.request().method() !== 'GET') {
await route.fallback();
return;
}
// Обработка только GET.
// ...
});

// Обработка POST запросов.
await page.route('**/*', async route => {
if (route.request().method() !== 'POST') {
await route.fallback();
return;
}
// Обработка только POST.
// ...
});

Также можно изменить запрос, переходя к следующему обработчику, таким образом промежуточный обработчик маршрута может изменить url, метод, заголовки и postData запроса.

await page.route('**/*', async (route, request) => {
// Переопределение заголовков
const headers = {
...request.headers(),
foo: 'foo-value', // установить заголовок "foo"
bar: undefined, // удалить заголовок "bar"
};
await route.fallback({ headers });
});

Используйте route.continue() для немедленной отправки запроса в сеть, в этом случае другие соответствующие обработчики не будут вызваны.

Аргументы

  • options [Object] (опционально)
    • headers [Object]<[string], [string]> (опционально)#

      Если установлено, изменяет HTTP-заголовки запроса. Значения заголовков будут преобразованы в строку.

    • method [string] (опционально)#

      Если установлено, изменяет метод запроса (например, GET или POST).

    • postData [string] | [Buffer] | [Serializable] (опционально)#

      Если установлено, изменяет данные post запроса.

    • url [string] (опционально)#

      Если установлено, изменяет URL запроса. Новый URL должен иметь тот же протокол, что и оригинальный. Изменение URL не повлияет на соответствие маршрута, все маршруты сопоставляются с использованием оригинального URL запроса.

Возвращает

  • [Promise]<[void]>#

fetch

Добавлено в: v1.29 route.fetch

Выполняет запрос и получает результат без его выполнения, чтобы ответ мог быть изменен и затем выполнен.

Использование

await page.route('https://dog.ceo/api/breeds/list/all', async route => {
const response = await route.fetch();
const json = await response.json();
json.message['big_red_dog'] = [];
await route.fulfill({ response, json });
});

Аргументы

  • options [Object] (опционально)
    • headers [Object]<[string], [string]> (опционально)#

      Если установлено, изменяет HTTP-заголовки запроса. Значения заголовков будут преобразованы в строку.

    • maxRedirects [number] (опционально) Добавлено в: v1.31#

      Максимальное количество перенаправлений запроса, которые будут автоматически следоваться. Ошибка будет выброшена, если количество превышено. По умолчанию 20. Передайте 0, чтобы не следовать перенаправлениям.

    • maxRetries [number] (опционально) Добавлено в: v1.46#

      Максимальное количество повторных попыток при сетевых ошибках. В настоящее время повторно пытается только ошибку ECONNRESET. Не повторяет попытки на основе кодов ответа HTTP. Ошибка будет выброшена, если лимит превышен. По умолчанию 0 - без повторных попыток.

    • method [string] (опционально)#

      Если установлено, изменяет метод запроса (например, GET или POST).

    • postData [string] | [Buffer] | [Serializable] (опционально)#

      Позволяет установить данные post запроса. Если параметр данных является объектом, он будет сериализован в строку json, и заголовок content-type будет установлен в application/json, если не установлен явно. В противном случае заголовок content-type будет установлен в application/octet-stream, если не установлен явно.

    • timeout [number] (опционально) Добавлено в: v1.33#

      Тайм-аут запроса в миллисекундах. По умолчанию 30000 (30 секунд). Передайте 0, чтобы отключить тайм-аут.

    • url [string] (опционально)#

      Если установлено, изменяет URL запроса. Новый URL должен иметь тот же протокол, что и оригинальный.

Возвращает

  • [Promise]<[APIResponse]>#

Детали

Обратите внимание, что опция headers будет применяться как к запрашиваемому запросу, так и к любым перенаправлениям, инициированным им. Если вы хотите применить headers только к оригинальному запросу, но не к перенаправлениям, рассмотрите возможность использования route.continue().


fulfill

Добавлено до v1.9 route.fulfill

Выполняет запрос маршрута с заданным ответом.

Использование

Пример выполнения всех запросов с ответами 404:

await page.route('**/*', async route => {
await route.fulfill({
status: 404,
contentType: 'text/plain',
body: 'Not Found!'
});
});

Пример обслуживания статического файла:

await page.route('**/xhr_endpoint', route => route.fulfill({ path: 'mock_data.json' }));

Аргументы

  • options [Object] (опционально)
    • body [string] | [Buffer] (опционально)#

      Тело ответа.

    • contentType [string] (опционально)#

      Если установлено, эквивалентно установке заголовка ответа Content-Type.

    • headers [Object]<[string], [string]> (опционально)#

      Заголовки ответа. Значения заголовков будут преобразованы в строку.

    • json [Serializable] (опционально) Добавлено в: v1.29#

      JSON ответ. Этот метод установит тип содержимого в application/json, если не установлен.

    • path [string] (опционально)#

      Путь к файлу для ответа. Тип содержимого будет определен из расширения файла. Если path является относительным путем, то он разрешается относительно текущей рабочей директории.

    • response [APIResponse] (опционально) Добавлено в: v1.15#

      [APIResponse] для выполнения запроса маршрута. Отдельные поля ответа (такие как заголовки) могут быть переопределены с помощью опций выполнения.

    • status [number] (опционально)#

      Код статуса ответа, по умолчанию 200.

Возвращает

  • [Promise]<[void]>#

request

Добавлено до v1.9 route.request

Запрос, который будет маршрутизирован.

Использование

route.request();

Возвращает

  • [Request]#