Request
Когда страница отправляет запрос на сетевой ресурс, происходит следующая последовательность событий, генерируемых Page:
- page.on('request') генерируется, когда запрос отправляется страницей.
- page.on('response') генерируется, когда/если получены статус и заголовки ответа на запрос.
- page.on('requestfinished') генерируется, когда тело ответа загружено и запрос завершен.
Если запрос не удается выполнить на каком-то этапе, то вместо события 'requestfinished'
(и, возможно, вместо события 'response') генерируется событие page.on('requestfailed').
Ответы с HTTP ошибками, такие как 404 или 503, все равно считаются успешными с точки зрения HTTP, поэтому запрос завершится событием 'requestfinished'
.
Если запрос получает ответ 'redirect', запрос успешно завершается событием requestfinished
, и новый запрос отправляется на перенаправленный URL.
Methods
allHeaders
Added in: v1.15Объект со всеми HTTP заголовками запроса, связанными с этим запросом. Имена заголовков приведены к нижнему регистру.
Использование
await request.allHeaders();
Возвращает
failure
Added before v1.9Метод возвращает null
, если только этот запрос не завершился неудачей, как сообщается событием requestfailed
.
Использование
Пример логирования всех неудачных запросов:
page.on('requestfailed', request => {
console.log(request.url() + ' ' + request.failure().errorText);
});
Возвращает
frame
Added before v1.9Возвращает Frame, который инициировал этот запрос.
Использование
const frameUrl = request.frame().url();
Возвращает
Детали
Обратите внимание, что в некоторых случаях фрейм недоступен, и этот метод вызовет ошибку.
- Когда запрос исходит из Service Worker. Вы можете использовать
request.serviceWorker()
, чтобы это проверить. - Когда навигационный запрос отправляется до создания соответствующего фрейма. Вы можете использовать request.isNavigationRequest(), чтобы это проверить.
Вот пример, который обрабатывает все случаи:
if (request.serviceWorker())
console.log(`request ${request.url()} from a service worker`);
else if (request.isNavigationRequest())
console.log(`request ${request.url()} is a navigation request`);
else
console.log(`request ${request.url()} from a frame ${request.frame().url()}`);
headerValue
Added in: v1.15Возвращает значение заголовка, соответствующего имени. Имя не чувствительно к регистру.
Использование
await request.headerValue(name);
Аргументы
Возвращает
headers
Added before v1.9Объект с HTTP заголовками запроса. Имена заголовков приведены к нижнему регистру. Обратите внимание, что этот метод не возвращает заголовки, связанные с безопасностью, включая связанные с cookie. Вы можете использовать request.allHeaders() для полного списка заголовков, включая информацию о cookie
.
Использование
request.headers();
Возвращает
headersArray
Added in: v1.15Массив со всеми HTTP заголовками запроса, связанными с этим запросом. В отличие от request.allHeaders(), имена заголовков НЕ приведены к нижнему регистру. Заголовки с несколькими записями, такие как Set-Cookie
, появляются в массиве несколько раз.
Использование
await request.headersArray();
Возвращает
isNavigationRequest
Added before v1.9Является ли этот запрос навигационным для фрейма.
Некоторые навигационные запросы отправляются до создания соответствующего фрейма, и поэтому request.frame() недоступен.
Использование
request.isNavigationRequest();
Возвращает
method
Added before v1.9Метод запроса (GET, POST и т.д.)
Использование
request.method();
Возвращает
postData
Added before v1.9Тело запроса, если оно есть.
Использование
request.postData();
Возвращает
postDataBuffer
Added before v1.9Тело запроса в бинарной форме, если оно есть.
Использование
request.postDataBuffer();
Возвращает
postDataJSON
Added before v1.9Возвращает разобранное тело запроса для form-urlencoded
и JSON в качестве резервного варианта, если оно есть.
Когда ответ application/x-www-form-urlencoded
, возвращается объект ключ/значение значений. В противном случае он будет разобран как JSON.
Использование
request.postDataJSON();
Возвращает
redirectedFrom
Added before v1.9Запрос, который был перенаправлен сервером на этот, если таковой имеется.
Когда сервер отвечает перенаправлением, Playwright создает новый объект Request. Два запроса связаны методами redirectedFrom()
и redirectedTo()
. Когда произошло несколько перенаправлений сервера, можно построить всю цепочку перенаправлений, многократно вызывая redirectedFrom()
.
Использование
Например, если веб-сайт http://example.com
перенаправляет на https://example.com
:
const response = await page.goto('http://example.com');
console.log(response.request().redirectedFrom().url()); // 'http://example.com'
Если веб-сайт https://google.com
не имеет перенаправлений:
const response = await page.goto('https://google.com');
console.log(response.request().redirectedFrom()); // null
Возвращает
redirectedTo
Added before v1.9Новый запрос, отправленный браузером, если сервер ответил перенаправлением.
Использование
Этот метод является противоположностью request.redirectedFrom():
console.log(request.redirectedFrom().redirectedTo() === request); // true
Возвращает
resourceType
Added before v1.9Содержит тип ресурса запроса, как он был воспринят движком рендеринга. ResourceType будет одним из следующих: document
, stylesheet
, image
, media
, font
, script
, texttrack
, xhr
, fetch
, eventsource
, websocket
, manifest
, other
.
Использование
request.resourceType();
Возвращает
response
Added before v1.9Возвращает соответствующий объект Response, или null
, если ответ не был получен из-за ошибки.
Использование
await request.response();
Возвращает
serviceWorker
Added in: v1.24Service Worker, который выполняет запрос.
Использование
request.serviceWorker();
Возвращает
Детали
Этот метод доступен только в Chromium. Его безопасно вызывать при использовании других браузеров, но он всегда будет возвращать null
.
Запросы, исходящие из Service Worker, не имеют доступного request.frame().
sizes
Added in: v1.15Возвращает информацию о размере ресурса для данного запроса.
Использование
await request.sizes();
Возвращает
- Promise<Object>#
-
requestBodySize
numberРазмер тела запроса (POST данных) в байтах. Установлено в 0, если тела не было.
-
requestHeadersSize
numberОбщее количество байтов от начала HTTP сообщения запроса до (и включая) двойной CRLF перед телом.
-
responseBodySize
numberРазмер полученного тела ответа (закодированного) в байтах.
-
responseHeadersSize
numberОбщее количество байтов от начала HTTP сообщения ответа до (и включая) двойной CRLF перед телом.
-
timing
Added before v1.9Возвращает информацию о времени загрузки ресурса для данного запроса. Большинство значений времени становятся доступными при получении ответа, responseEnd
становится доступным, когда запрос завершен. Подробнее см. Resource Timing API.
Использование
const requestFinishedPromise = page.waitForEvent('requestfinished');
await page.goto('http://example.com');
const request = await requestFinishedPromise;
console.log(request.timing());
Возвращает
- Object#
-
startTime
numberВремя начала запроса в миллисекундах, прошедших с 1 января 1970 года 00:00:00 UTC
-
domainLookupStart
numberВремя непосредственно перед тем, как браузер начинает поиск доменного имени для ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
domainLookupEnd
numberВремя непосредственно после того, как браузер начинает поиск доменного имени для ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
connectStart
numberВремя непосредственно перед тем, как пользовательский агент начинает устанавливать соединение с сервером для получения ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
secureConnectionStart
numberВремя непосредственно перед тем, как браузер начинает процесс рукопожатия для защиты текущего соединения. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
connectEnd
numberВремя непосредственно перед тем, как пользовательский агент начинает устанавливать соединение с сервером для получения ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
requestStart
numberВремя непосредственно перед тем, как браузер начинает запрашивать ресурс с сервера, из кэша или локального ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
responseStart
numberВремя непосредственно после того, как браузер получает первый байт ответа от сервера, из кэша или локального ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
responseEnd
numberВремя непосредственно после того, как браузер получает последний байт ресурса или непосредственно перед закрытием транспортного соединения, в зависимости от того, что произойдет раньше. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно.
-
url
Added before v1.9URL запроса.
Использование
request.url();
Возвращает