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Объект со всеми HTTP заголовками запроса, связанными с этим запросом. Имена заголовков приведены к нижнему регистру.
Использование
Request.allHeaders();
Возвращает
failure
Добавлено до v1.9Метод возвращает null
, если только этот запрос не завершился неудачей, как сообщается событием requestfailed
.
Использование
Пример логирования всех неудачных запросов:
page.onRequestFailed(request -> {
System.out.println(request.url() + " " + request.failure());
});
Возвращает
frame
Добавлено до v1.9Возвращает Frame, который инициировал этот запрос.
Использование
String frameUrl = request.frame().url();
Возвращает
Детали
Обратите внимание, что в некоторых случаях фрейм недоступен, и этот метод вызовет исключение.
- Когда запрос исходит из Service Worker. Вы можете использовать
request.serviceWorker()
, чтобы это проверить. - Когда навигационный запрос отправляется до создания соответствующего фрейма. Вы можете использовать Request.isNavigationRequest(), чтобы это проверить.
Вот пример, который обрабатывает все случаи:
headerValue
Добавлено в: v1.15Возвращает значение заголовка, соответствующего имени. Имя нечувствительно к регистру.
Использование
Request.headerValue(name);
Аргументы
Возвращает
headers
Добавлено до v1.9Объект с HTTP заголовками запроса. Имена заголовков приведены к нижнему регистру. Обратите внимание, что этот метод не возвращает заголовки, связанные с безопасностью, включая связанные с cookie. Вы можете использовать Request.allHeaders() для полного списка заголовков, включая информацию о cookie
.
Использование
Request.headers();
Возвращает
headersArray
Добавлено в: v1.15Массив со всеми HTTP заголовками запроса, связанными с этим запросом. В отличие от Request.allHeaders(), имена заголовков НЕ приведены к нижнему регистру. Заголовки с несколькими записями, такие как Set-Cookie
, появляются в массиве несколько раз.
Использование
Request.headersArray();
Возвращает
isNavigationRequest
Добавлено до v1.9Является ли этот запрос навигацией фрейма.
Некоторые навигационные запросы отправляются до создания соответствующего фрейма, и поэтому Request.frame() недоступен.
Использование
Request.isNavigationRequest();
Возвращает
method
Добавлено до v1.9Метод запроса (GET, POST и т.д.)
Использование
Request.method();
Возвращает
postData
Добавлено до v1.9Тело запроса, если оно есть.
Использование
Request.postData();
Возвращает
postDataBuffer
Добавлено до v1.9Тело запроса в бинарной форме, если оно есть.
Использование
Request.postDataBuffer();
Возвращает
redirectedFrom
Добавлено до v1.9Запрос, который был перенаправлен сервером на этот, если таковой имеется.
Когда сервер отвечает перенаправлением, 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.redirectedFrom():
System.out.println(request.redirectedFrom().redirectedTo() == request); // true
Возвращает
resourceType
Добавлено до v1.9Содержит тип ресурса запроса, как он был воспринят движком рендеринга. ResourceType будет одним из следующих: document
, stylesheet
, image
, media
, font
, script
, texttrack
, xhr
, fetch
, eventsource
, websocket
, manifest
, other
.
Использование
Request.resourceType();
Возвращает
response
Добавлено до v1.9Возвращает соответствующий объект Response, или null
, если ответ не был получен из-за ошибки.
Использование
Request.response();
Возвращает
sizes
Добавлено в: v1.15Возвращает информацию о размере ресурса для данного запроса.
Использование
Request.sizes();
Возвращает
- Sizes#
-
requestBodySize
intРазмер тела запроса (POST данных) в байтах. Установлено в 0, если тела не было.
-
requestHeadersSize
intОбщее количество байт от начала HTTP сообщения запроса до (и включая) двойной CRLF перед телом.
-
responseBodySize
intРазмер полученного тела ответа (закодированного) в байтах.
-
responseHeadersSize
intОбщее количество байт от начала HTTP сообщения ответа до (и включая) двойной CRLF перед телом.
-
timing
Добавлено до v1.9Возвращает информацию о времени ресурса для данного запроса. Большинство значений времени становятся доступными при получении ответа, 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.9URL запроса.
Использование
Request.url();
Возвращает