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();
Возвращает
- [Promise]<[Object]<[string], [string]>>#
failure
Added before v1.9Метод возвращает null
, если только этот запрос не завершился неудачей, как сообщается событием requestfailed
.
Использование
Пример логирования всех неудачных запросов:
page.on('requestfailed', request => {
console.log(request.url() + ' ' + request.failure().errorText);
});
Возвращает
- [null] | [Object]#
-
errorText
[string]Человекочитаемое сообщение об ошибке, например,
'net::ERR_FAILED'
.
-
frame
Added before v1.9Возвращает [Frame], который инициировал этот запрос.
Использование
const frameUrl = request.frame().url();
Возвращает
- [Frame]#
Детали
Обратите внимание, что в некоторых случаях фрейм недоступен, и этот метод вызовет ошибку.
- Когда запрос исходит из 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);
Аргументы
-
name
[string]#Имя заголовка.
Возвращает
- [Promise]<[null] | [string]>#
headers
Added before v1.9Объект с HTTP заголовками запроса. Имена заголовков приведены к нижнему регистру. Обратите внимание, что этот метод не возвращает заголовки, связанные с безопасностью, включая связанные с cookie. Вы можете использовать request.allHeaders() для полного списка заголовков, включая информацию о cookie
.
Использование
request.headers();
Возвращает
- [Object]<[string], [string]>#
headersArray
Added in: v1.15Массив со всеми HTTP заголовками запроса, связанными с этим запросом. В отличие от request.allHeaders(), имена заголовков НЕ приведены к нижнему регистру. Заголовки с несколькими записями, такие как Set-Cookie
, появляются в массиве несколько раз.
Использование
await request.headersArray();
Возвращает
- [Promise]<[Array]<[Object]>>#
-
name
[string]Имя заголовка.
-
value
[string]Значение заголовка.
-
isNavigationRequest
Added before v1.9Является ли этот запрос навигационным для фрейма.
Некоторые навигационные запросы отправляются до создания соответствующего фрейма, и поэтому request.frame() недоступен.
Использование
request.isNavigationRequest();
Возвращает
- [boolean]#
method
Added before v1.9Метод запроса (GET, POST и т.д.)
Использование
request.method();
Возвращает
- [string]#
postData
Added before v1.9Тело запроса, если оно есть.
Использование
request.postData();
Возвращает
- [null] | [string]#
postDataBuffer
Added before v1.9Тело запроса в бинарной форме, если оно есть.
Использование
request.postDataBuffer();
Возвращает
- [null] | [Buffer]#
postDataJSON
Added before v1.9Возвращает разобранное тело запроса для form-urlencoded
и JSON в качестве резервного варианта, если оно есть.
Когда ответ application/x-www-form-urlencoded
, возвращается объект ключ/значение значений. В противном случае он будет разобран как JSON.
Использование
request.postDataJSON();
Возвращает
- [null] | [Serializable]#
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
Возвращает
- [null] | [Request]#
redirectedTo
Added before v1.9Новый запрос, отправленный браузером, если сервер ответил перенаправлением.
Использование
Этот метод является противоположностью request.redirectedFrom():
console.log(request.redirectedFrom().redirectedTo() === request); // true
Возвращает
- [null] | [Request]#
resourceType
Added before v1.9Содержит тип ресурса запроса, как он был воспринят движком рендеринга. ResourceType будет одним из следующих: document
, stylesheet
, image
, media
, font
, script
, texttrack
, xhr
, fetch
, eventsource
, websocket
, manifest
, other
.
Использование
request.resourceType();
Возвращает
- [string]#
response
Added before v1.9Возвращает соответствующий объект [Response], или null
, если ответ не был получен из-за ошибки.
Использование
await request.response();
Возвращает
- [Promise]<[null] | [Response]>#
serviceWorker
Added in: v1.24Service [Worker], который выполняет запрос.
Использование
request.serviceWorker();
Возвращает
- [null] | [Worker]#
Детали
Этот метод доступен только в 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();
Возвращает
- [string]#