Spec-Zone.ru › Playwright

Маршрут

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

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

Методы​

abort​

Добавлен до версии v1.9

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

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

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

Аргументы

  • errorCode строка (необязательно)

    Необязательный код ошибки. По умолчанию 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

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

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

await page.route('**/*', async (route, request) => {
  // Override headers
  const headers = {
    ...request.headers(),
    foo: 'foo-value', // set "foo" header
    bar: undefined, // remove "bar" header
  };
  await route.continue({ headers });
});

Аргументы

  • options Объект (необязательно)
    • headers Объект<строка, строка> (необязательно)

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

    • method строка (необязательно)

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

    • postData строка | Буфер | Сериализуемый (необязательно)

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

    • url строка (необязательно)

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

Возвращает

  • Promise<void>

Подробности

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

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

fallback​

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

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

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

await page.route('**/*', async route => {
  // Runs last.
  await route.abort();
});
await page.route('**/*', async route => {
  // Runs second.
  await route.fallback();
});
await page.route('**/*', async route => {
  // Runs first.
  await route.fallback();
});

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

// Handle GET requests.
await page.route('**/*', async route => {
  if (route.request().method() !== 'GET') {
    await route.fallback();
    return;
  }
  // Handling GET only.
  // ...
});

// Handle POST requests.
await page.route('**/*', async route => {
  if (route.request().method() !== 'POST') {
    await route.fallback();
    return;
  }
  // Handling POST only.
  // ...
});

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

await page.route('**/*', async (route, request) => {
  // Override headers
  const headers = {
    ...request.headers(),
    foo: 'foo-value', // set "foo" header
    bar: undefined, // remove "bar" header
  };
  await route.fallback({ headers });
});

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

Аргументы

  • options Объект (необязательно)
    • headers Объект<строка, строка> (необязательно)

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

    • method строка (необязательно)

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

    • postData строка | Буфер | Сериализуемый (необязательно)

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

    • url строка (необязательно)

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

Возвращает

  • Promise<void>

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 Объект (необязательно)
    • headers Объект<строка, строка> (необязательно)

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

    • maxRedirects число (необязательно)

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

    • maxRetries число (необязательно)

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

    • method строка (необязательно)

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

    • postData строка | Буфер | Сериализуемый (необязательно)

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

    • timeout число (необязательно)

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

    • url строка (необязательно)

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

Возвращает

  • Обещание<APIResponse>

Подробности

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

fulfill​

Добавлен до версии v1.9

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

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

Пример выполнения всех запросов с ответами 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 Объект (необязательно)
    • body строка | Буфер (необязательно)

      Тело ответа.

    • contentType строка (необязательно)

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

    • headers Объект<строка, строка> (необязательно)

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

    • json Сериализуемый (необязательно)

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

    • path строка (необязательно)

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

    • response APIResponse (необязательно)

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

    • status число (необязательно)

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

Возвращает

  • Обещание<ничего>

request​

Добавлен до версии v1.9

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

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

route.request();

Возвращает

  • Запрос

© 2024 Microsoft
Licensed under the Apache License, Version 2.0.
https://playwright.dev/docs/api/class-route

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API