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

Request

Когда страница отправляет запрос на сетевой ресурс, происходит следующая последовательность событий, испускаемых Page:

  • Page.onRequest(handler) испускается, когда запрос отправляется страницей.
  • Page.onResponse(handler) испускается, когда/если получены статус и заголовки ответа на запрос.
  • Page.onRequestFinished(handler) испускается, когда тело ответа загружено и запрос завершен.

Если запрос не удается на каком-то этапе, то вместо события 'requestfinished' (и, возможно, вместо события 'response') испускается событие Page.onRequestFailed(handler).

примечание

Ответы с HTTP ошибками, такие как 404 или 503, все равно считаются успешными с точки зрения HTTP, поэтому запрос завершится событием 'requestfinished'.

Если запрос получает ответ 'redirect', запрос успешно завершается событием requestfinished, и новый запрос отправляется на перенаправленный URL.


Методы

allHeaders

Добавлено в: v1.15 request.allHeaders

Объект со всеми HTTP заголовками запроса, связанными с этим запросом. Имена заголовков приведены к нижнему регистру.

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

Request.allHeaders();

Возвращает


failure

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

Метод возвращает null, если только этот запрос не завершился неудачей, как сообщается событием requestfailed.

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

Пример логирования всех неудачных запросов:

page.onRequestFailed(request -> {
System.out.println(request.url() + " " + request.failure());
});

Возвращает


frame

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

Возвращает Frame, который инициировал этот запрос.

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

String frameUrl = request.frame().url();

Возвращает

Детали

Обратите внимание, что в некоторых случаях фрейм недоступен, и этот метод вызовет исключение.

  • Когда запрос исходит из Service Worker. Вы можете использовать request.serviceWorker(), чтобы это проверить.
  • Когда навигационный запрос отправляется до создания соответствующего фрейма. Вы можете использовать Request.isNavigationRequest(), чтобы это проверить.

Вот пример, который обрабатывает все случаи:


headerValue

Добавлено в: v1.15 request.headerValue

Возвращает значение заголовка, соответствующего имени. Имя нечувствительно к регистру.

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

Request.headerValue(name);

Аргументы

  • name String#

    Имя заголовка.

Возвращает


headers

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

Объект с HTTP заголовками запроса. Имена заголовков приведены к нижнему регистру. Обратите внимание, что этот метод не возвращает заголовки, связанные с безопасностью, включая связанные с cookie. Вы можете использовать Request.allHeaders() для полного списка заголовков, включая информацию о cookie.

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

Request.headers();

Возвращает


headersArray

Добавлено в: v1.15 request.headersArray

Массив со всеми HTTP заголовками запроса, связанными с этим запросом. В отличие от Request.allHeaders(), имена заголовков НЕ приведены к нижнему регистру. Заголовки с несколькими записями, такие как Set-Cookie, появляются в массиве несколько раз.

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

Request.headersArray();

Возвращает

  • List<HttpHeader>#
    • name String

      Имя заголовка.

    • value String

      Значение заголовка.


isNavigationRequest

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

Является ли этот запрос навигацией фрейма.

Некоторые навигационные запросы отправляются до создания соответствующего фрейма, и поэтому Request.frame() недоступен.

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

Request.isNavigationRequest();

Возвращает


method

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

Метод запроса (GET, POST и т.д.)

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

Request.method();

Возвращает


postData

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

Тело запроса, если оно есть.

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

Request.postData();

Возвращает


postDataBuffer

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

Тело запроса в бинарной форме, если оно есть.

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

Request.postDataBuffer();

Возвращает


redirectedFrom

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

Запрос, который был перенаправлен сервером на этот, если таковой имеется.

Когда сервер отвечает перенаправлением, Playwright создает новый объект Request. Два запроса связаны методами redirectedFrom() и redirectedTo(). Когда произошло несколько перенаправлений сервера, можно построить всю цепочку перенаправлений, многократно вызывая redirectedFrom().

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

Например, если веб-сайт http://example.com перенаправляет на https://example.com:

Response response = page.navigate("http://example.com");
System.out.println(response.request().redirectedFrom().url()); // "http://example.com"

Если веб-сайт https://google.com не имеет перенаправлений:

Response response = page.navigate("https://google.com");
System.out.println(response.request().redirectedFrom()); // null

Возвращает


redirectedTo

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

Новый запрос, отправленный браузером, если сервер ответил перенаправлением.

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

Этот метод является противоположностью Request.redirectedFrom():

System.out.println(request.redirectedFrom().redirectedTo() == request); // true

Возвращает


resourceType

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

Содержит тип ресурса запроса, как он был воспринят движком рендеринга. ResourceType будет одним из следующих: document, stylesheet, image, media, font, script, texttrack, xhr, fetch, eventsource, websocket, manifest, other.

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

Request.resourceType();

Возвращает


response

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

Возвращает соответствующий объект Response, или null, если ответ не был получен из-за ошибки.

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

Request.response();

Возвращает


sizes

Добавлено в: v1.15 request.sizes

Возвращает информацию о размере ресурса для данного запроса.

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

Request.sizes();

Возвращает

  • Sizes#
    • requestBodySize int

      Размер тела запроса (POST данных) в байтах. Установлено в 0, если тела не было.

    • requestHeadersSize int

      Общее количество байт от начала HTTP сообщения запроса до (и включая) двойной CRLF перед телом.

    • responseBodySize int

      Размер полученного тела ответа (закодированного) в байтах.

    • responseHeadersSize int

      Общее количество байт от начала HTTP сообщения ответа до (и включая) двойной CRLF перед телом.


timing

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

Возвращает информацию о времени ресурса для данного запроса. Большинство значений времени становятся доступными при получении ответа, responseEnd становится доступным, когда запрос завершается. Найдите больше информации в Resource Timing API.

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

page.onRequestFinished(request -> {
Timing timing = request.timing();
System.out.println(timing.responseEnd - timing.startTime);
});
page.navigate("http://example.com");

Возвращает

  • Timing#
    • startTime double

      Время начала запроса в миллисекундах, прошедших с 1 января 1970 года 00:00:00 UTC

    • domainLookupStart double

      Время непосредственно перед тем, как браузер начинает поиск доменного имени для ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • domainLookupEnd double

      Время непосредственно после того, как браузер начинает поиск доменного имени для ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • connectStart double

      Время непосредственно перед тем, как пользовательский агент начинает устанавливать соединение с сервером для получения ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • secureConnectionStart double

      Время непосредственно перед тем, как браузер начинает процесс рукопожатия для защиты текущего соединения. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • connectEnd double

      Время непосредственно перед тем, как пользовательский агент начинает устанавливать соединение с сервером для получения ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • requestStart double

      Время непосредственно перед тем, как браузер начинает запрашивать ресурс с сервера, из кэша или локального ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • responseStart double

      Время непосредственно после того, как браузер получает первый байт ответа от сервера, из кэша или локального ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • responseEnd double

      Время непосредственно после того, как браузер получает последний байт ресурса или непосредственно перед закрытием транспортного соединения, в зависимости от того, что произойдет раньше. Значение указано в миллисекундах относительно startTime, -1, если недоступно.


url

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

URL запроса.

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

Request.url();

Возвращает