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

Route

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

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


Методы

abort

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

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

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

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

Возвращает


fallback

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

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

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

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

page.route("**/*", route -> {
// Выполняется последним.
route.abort();
});

page.route("**/*", route -> {
// Выполняется вторым.
route.fallback();
});

page.route("**/*", route -> {
// Выполняется первым.
route.fallback();
});

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

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

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

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

page.route("**/*", route -> {
// Переопределение заголовков
Map<String, String> headers = new HashMap<>(route.request().headers());
headers.put("foo", "foo-value"); // установить заголовок "foo"
headers.remove("bar"); // удалить заголовок "bar"
route.fallback(new Route.ResumeOptions().setHeaders(headers));
});

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

Аргументы

  • options Route.FallbackOptions (опционально)
    • setHeaders Map<String, String> (опционально)#

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

    • setMethod String (опционально)#

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

    • setPostData String | byte[] (опционально)#

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

    • setUrl String (опционально)#

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

Возвращает


fetch

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

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

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

page.route("https://dog.ceo/api/breeds/list/all", route -> {
APIResponse response = route.fetch();
JsonObject json = new Gson().fromJson(response.text(), JsonObject.class);
JsonObject message = itemObj.get("json").getAsJsonObject();
message.set("big_red_dog", new JsonArray());
route.fulfill(new Route.FulfillOptions()
.setResponse(response)
.setBody(json.toString()));
});

Аргументы

  • options Route.FetchOptions (опционально)
    • setHeaders Map<String, String> (опционально)#

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

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

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

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

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

    • setMethod String (опционально)#

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

    • setPostData String | byte[] (опционально)#

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

    • setTimeout double (опционально) Добавлено в: v1.33#

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

    • setUrl String (опционально)#

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

Возвращает

Детали

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


fulfill

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

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

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

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

page.route("**/*", route -> {
route.fulfill(new Route.FulfillOptions()
.setStatus(404)
.setContentType("text/plain")
.setBody("Not Found!"));
});

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

page.route("**/xhr_endpoint", route -> route.fulfill(
new Route.FulfillOptions().setPath(Paths.get("mock_data.json"))));

Аргументы

  • options Route.FulfillOptions (опционально)
    • setBody String (опционально)#

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

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

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

    • setContentType String (опционально)#

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

    • setHeaders Map<String, String> (опционально)#

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

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

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

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

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

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

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

Возвращает


request

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

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

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

Route.request();

Возвращает


resume

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

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

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

page.route("**/*", route -> {
// Переопределение заголовков
Map<String, String> headers = new HashMap<>(route.request().headers());
headers.put("foo", "foo-value"); // установить заголовок "foo"
headers.remove("bar"); // удалить заголовок "bar"
route.resume(new Route.ResumeOptions().setHeaders(headers));
});

Аргументы

  • options Route.ResumeOptions (опционально)
    • setHeaders Map<String, String> (опционально)#

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

    • setMethod String (опционально)#

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

    • setPostData String | byte[] (опционально)#

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

    • setUrl String (опционально)#

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

Возвращает

Детали

Опция setHeaders применяется как к маршрутизированному запросу, так и к любым перенаправлениям, инициированным им. Однако setUrl, setMethod и setPostData применяются только к оригинальному запросу и не переносятся на перенаправленные запросы.

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