Перейти к основному содержимому

Route

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

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


Методы

AbortAsync

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

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

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

await Route.AbortAsync(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' - Произошла общая ошибка.

Возвращает


ContinueAsync

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

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

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

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 });
});

Аргументы

  • options RouteContinueOptions? (опционально)
    • Headers IDictionary?<string, string> (опционально)#

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

    • Method string? (опционально)#

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

    • PostData byte[]? (опционально)#

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

    • Url string? (опционально)#

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

Возвращает

Детали

Опция Headers применяется как к маршрутизированному запросу, так и к любым перенаправлениям, которые он инициирует. Однако Url, Method и PostData применяются только к оригинальному запросу и не переносятся на перенаправленные запросы.

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


FallbackAsync

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

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

Аргументы

  • options RouteFallbackOptions? (опционально)
    • Headers IDictionary?<string, string> (опционально)#

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

    • Method string? (опционально)#

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

    • PostData byte[]? (опционально)#

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

    • Url string? (опционально)#

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

Возвращает


FetchAsync

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

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

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

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 });
});

Аргументы

  • options RouteFetchOptions? (опционально)
    • Headers IDictionary?<string, string> (опционально)#

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

    • MaxRedirects int? (опционально) Добавлено в: v1.31#

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

    • MaxRetries int? (опционально) Добавлено в: v1.46#

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

    • Method string? (опционально)#

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

    • PostData byte[]? (опционально)#

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

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

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

    • Url string? (опционально)#

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

Возвращает

Детали

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


FulfillAsync

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

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

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

Пример выполнения всех запросов с ответами 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" }));

Аргументы

  • options RouteFulfillOptions? (опционально)
    • Body string? (опционально)#

      Опциональное тело ответа в виде текста.

    • BodyBytes byte[]? (опционально) Добавлено в: v1.9#

      Опциональное тело ответа в виде сырых байтов.

    • ContentType string? (опционально)#

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

    • Headers IDictionary?<string, string> (опционально)#

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

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

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

    • Path string? (опционально)#

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

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

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

    • Status int? (опционально)#

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

Возвращает


Request

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

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

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

Route.Request

Возвращает