Маршрут
Всякий раз, когда маршрут сети настраивается с помощью 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'- Произошла общая ошибка.
-
Возвращает
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 должен иметь тот же протокол, что и исходный.
-
Возвращает
Подробности
Опция заголовков применяется как к запросу маршрута, так и к любым редиректам, которые он инициирует. Однако 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 запроса.
-
Возвращает
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 должен иметь тот же протокол, что и исходный.
-
Возвращает
Подробности
Обратите внимание, что опция заголовков будет применена к запросу 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— относительный путь, он разрешается относительно текущего каталога. -
responseAPIResponse (необязательно)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