Route
Когда сетевая маршрутизация настраивается с помощью Page.RouteAsync() или BrowserContext.RouteAsync(), объект Route позволяет управлять маршрутом.
Узнайте больше о сетевом взаимодействии.
Методы
AbortAsync
Добавлено до версии v1.9Прерывает запрос маршрута.
Использование
await Route.AbortAsync(errorCode);
Аргументы
-
errorCodestring? (опционально)#Опциональный код ошибки. По умолчанию
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'- Произошла общая ошибка.
Возвращает
ContinueAsync
Добавлено до версии v1.9Отправляет запрос маршрута в сеть с опциональными переопределениями.
Использование
await page.RouteAsync("**/*", async route =>
{
var headers = new Dictionary<string, string>(route.Request.Headers) { { "foo", "bar" } };
headers.Remove("origin");
await route.ContinueAsync(new() { Headers = headers });
});
Аргументы
optionsRouteContinueOptions?(опционально)-
HeadersIDictionary?<string, string> (опционально)#Если установлено, изменяет HTTP-заголовки запроса. Значения заголовков будут преобразованы в строку.
-
Если установлено, изменяет метод запроса (например, GET или POST).
-
PostDatabyte[]? (опционально)#Если установлено, изменяет данные POST запроса.
-
Если установлено, изменяет URL запроса. Новый URL должен иметь тот же протокол, что и оригинальный.
-
Возвращает
Детали
Опция Headers применяется как к маршрутизированному запросу, так и к любым перенаправлениям, которые он инициирует. Однако Url, Method и PostData применяются только к оригинальному запросу и не переносятся на перенаправленные запросы.
Route.ContinueAsync() немедленно отправит запрос в сеть, другие соответствующие обработчики не будут вызваны. Используйте Route.FallbackAsync(), если вы хотите, чтобы следующий соответствующий обработчик в цепочке был вызван.
FallbackAsync
Добавлено в: v1.23Продолжает запрос маршрута с опциональными переопределениями. Метод аналогичен Route.ContinueAsync(), с той разницей, что другие соответствующие обработчики будут вызваны перед отправкой запроса.
Использование
Когда несколько маршрутов соответствуют заданному шаблону, они выполняются в порядке, обратном их регистрации. Таким образом, последний зарегистрированный маршрут всегда может переопределить все предыдущие. В примере ниже запрос будет обработан сначала самым нижним обработчиком, затем он перейдет к предыдущему и в конце будет прерван первым зарегистрированным маршрутом.
await page.RouteAsync("**/*", route => {
// Выполняется последним.
await route.AbortAsync();
});
await page.RouteAsync("**/*", route => {
// Выполняется вторым.
await route.FallbackAsync();
});
await page.RouteAsync("**/*", route => {
// Выполняется первым.
await route.FallbackAsync();
});
Регистрация нескольких маршрутов полезна, когда вы хотите, чтобы отдельные обработчики обрабатывали разные виды запросов, например, вызовы API против ресурсов страницы или GET-запросы против POST-запросов, как в примере ниже.
// Обработка GET-запросов.
await page.RouteAsync("**/*", route => {
if (route.Request.Method != "GET") {
await route.FallbackAsync();
return;
}
// Обработка только GET.
// ...
});
// Обработка POST-запросов.
await page.RouteAsync("**/*", route => {
if (route.Request.Method != "POST") {
await route.FallbackAsync();
return;
}
// Обработка только POST.
// ...
});
Можно также изменить запрос, переходя к следующему обработчику, таким образом промежуточный обработчик маршрута может изменить URL, метод, заголовки и postData запроса.
await page.RouteAsync("**/*", async route =>
{
var headers = new Dictionary<string, string>(route.Request.Headers) { { "foo", "foo-value" } };
headers.Remove("bar");
await route.FallbackAsync(new() { Headers = headers });
});
Используйте Route.ContinueAsync(), чтобы немедленно отправить запрос в сеть, другие соответствующие обработчики не будут вызваны в этом случае.
Аргументы
optionsRouteFallbackOptions?(опционально)-
HeadersIDictionary?<string, string> (опционально)#Если установлено, изменяет HTTP-заголовки запроса. Значения заголовков будут преобразованы в строку.
-
Если установлено, изменяет метод запроса (например, GET или POST).
-
PostDatabyte[]? (опционально)#Если установлено, изменяет данные POST запроса.
-
Если установлено, изменяет URL запроса. Новый URL должен иметь тот же протокол, что и оригинальный. Изменение URL не повлияет на соответствие маршрута, все маршруты сопоставляются с использованием оригинального URL запроса.
-
Возвращает
FetchAsync
Добавлено в: v1.29Выполняет запрос и получает результат без его выполнения, чтобы ответ мог быть изменен и затем выполнен.
Использование
await page.RouteAsync("https://dog.ceo/api/breeds/list/all", async route =>
{
var response = await route.FetchAsync();
dynamic json = await response.JsonAsync();
json.message.big_red_dog = new string[] {};
await route.FulfillAsync(new() { Response = response, Json = json });
});
Аргументы
optionsRouteFetchOptions?(опционально)-
HeadersIDictionary?<string, string> (опционально)#Если установлено, изменяет HTTP-заголовки запроса. Значения заголовков будут преобразованы в строку.
-
MaxRedirectsint? (опционально) Добавлено в: v1.31#Максимальное количество перенаправлений запроса, которые будут автоматически следоваться. Ошибка будет выброшена, если количество превышено. По умолчанию
20. Передайте0, чтобы не следовать перенаправлениям. -
MaxRetriesint? (опционально) Добавлено в: v1.46#Максимальное количество повторных попыток при сетевых ошибках. В настоящее время повторно пытается только ошибку
ECONNRESET. Не повторяет попытки на основе кодов ответа HTTP. Ошибка будет выброшена, если лимит превышен. По умолчанию0- без повторных попыток. -
Если установлено, изменяет метод запроса (например, GET или POST).
-
PostDatabyte[]? (опционально)#Если установлено, изменяет данные POST запроса.
-
Timeout[float]? (опционально) Добавлено в: v1.33#Тайм-аут запроса в миллисекундах. По умолчанию
30000(30 секунд). Передайте0, чтобы отключить тайм-аут. -
Если установлено, изменяет URL запроса. Новый URL должен иметь тот же протокол, что и оригинальный.
-
Возвращает
Детали
Обратите внимание, что опция Headers будет применяться как к запрашиваемому запросу, так и к любым перенаправлениям, инициированным им. Если вы хотите применить Headers только к оригинальному запросу, но не к перенаправлениям, рассмотрите возможность использования Route.ContinueAsync().
FulfillAsync
Добавлено до версии v1.9Выполняет запрос маршрута с заданным ответом.
Использование
Пример выполнения всех запросов с ответами 404:
await page.RouteAsync("**/*", route => route.FulfillAsync(new ()
{
Status = 404,
ContentType = "text/plain",
Body = "Not Found!"
}));
Пример обслуживания статического файла:
await page.RouteAsync("**/xhr_endpoint", route => route.FulfillAsync(new() { Path = "mock_data.json" }));
Аргументы
optionsRouteFulfillOptions?(опционально)-
Опциональное тело ответа в виде текста.
-
BodyBytesbyte[]? (опционально) Добавлено в: v1.9#Опциональное тело ответа в виде сырых байтов.
-
ContentTypestring? (опционально)#Если установлено, эквивалентно установке заголовка ответа
Content-Type. -
HeadersIDictionary?<string, string> (опционально)#Заголовки ответа. Значения заголовков будут преобразованы в строку.
-
Json[object]? (опционально) Добавлено в: v1.29#JSON-ответ. Этот метод установит тип содержимого в
application/json, если он не установлен. -
Путь к файлу для ответа. Тип содержимого будет определен по расширению файла. Если
pathявляется относительным путем, то он разрешается относительно текущей рабочей директории. -
ResponseAPIResponse? (опционально) Добавлено в: v1.15#APIResponse для выполнения запроса маршрута. Отдельные поля ответа (такие как заголовки) могут быть переопределены с помощью опций выполнения.
-
Код статуса ответа, по умолчанию
200.
-
Возвращает
Request
Добавлено до версии v1.9Запрос, который будет маршрутизирован.
Использование
Route.Request
Возвращает