Request
Когда страница отправляет запрос на сетевой ресурс, происходит следующая последовательность событий, генерируемых Page:
- Page.Request генерируется, когда запрос отправляется страницей.
- Page.Response генерируется, когда/если получены статус и заголовки ответа на запрос.
- Page.RequestFinished генерируется, когда тело ответа загружено и запрос завершен.
Если запрос не удается на каком-то этапе, то вместо события 'requestfinished'
(а возможно и вместо события 'response') генерируется событие Page.RequestFailed.
Ответы с HTTP ошибками, такие как 404 или 503, все равно считаются успешными с точки зрения HTTP, поэтому запрос завершится событием 'requestfinished'
.
Если запрос получает ответ 'redirect', запрос успешно завершается событием requestfinished
, и новый запрос отправляется на перенаправленный URL.
Методы
AllHeadersAsync
Добавлено в: v1.15Объект со всеми HTTP заголовками запроса, связанными с этим запросом. Имена заголовков приведены к нижнему регистру.
Использование
await Request.AllHeadersAsync();
Возвращает
Failure
Добавлено до v1.9Метод возвращает null
, если только этот запрос не завершился неудачей, как сообщается событием requestfailed
.
Использование
Пример логирования всех неудачных запросов:
page.RequestFailed += (_, request) =>
{
Console.WriteLine(request.Failure);
};
Возвращает
Frame
Добавлено до v1.9Возвращает Frame, который инициировал этот запрос.
Использование
var frameUrl = request.Frame.Url;
Возвращает
Детали
Обратите внимание, что в некоторых случаях фрейм недоступен, и этот метод вызовет исключение.
- Когда запрос исходит из Service Worker. Вы можете использовать
request.serviceWorker()
, чтобы это проверить. - Когда запрос навигации отправляется до создания соответствующего фрейма. Вы можете использовать Request.IsNavigationRequest, чтобы это проверить.
Вот пример, который обрабатывает все случаи:
HeaderValueAsync
Добавлено в: v1.15Возвращает значение заголовка, соответствующего имени. Имя не чувствительно к регистру.
Использование
await Request.HeaderValueAsync(name);
Аргументы
Возвращает
Headers
Добавлено до v1.9Объект с HTTP заголовками запроса. Имена заголовков приведены к нижнему регистру. Обратите внимание, что этот метод не возвращает заголовки, связанные с безопасностью, включая заголовки, связанные с cookie. Вы можете использовать Request.AllHeadersAsync() для полного списка заголовков, включая информацию о cookie
.
Использование
Request.Headers
Возвращает
HeadersArrayAsync
Добавлено в: v1.15Массив со всеми HTTP заголовками запроса, связанными с этим запросом. В отличие от Request.AllHeadersAsync(), имена заголовков НЕ приведены к нижнему регистру. Заголовки с несколькими записями, такие как Set-Cookie
, появляются в массиве несколько раз.
Использование
await Request.HeadersArrayAsync();
Возвращает
- IEnumerable<
HttpHeader
>#
IsNavigationRequest
Добавлено до v1.9Является ли этот запрос управляющим навигацией фрейма.
Некоторые запросы навигации отправляются до создания соответствующего фрейма, и поэтому Request.Frame недоступен.
Использование
Request.IsNavigationRequest
Возвращает
Method
Добавлено до v1.9Метод запроса (GET, POST и т.д.)
Использование
Request.Method
Возвращает
PostData
Добавлено до v1.9Тело запроса, если оно есть.
Использование
Request.PostData
Возвращает
PostDataBuffer
Добавлено до v1.9Тело запроса в бинарной форме, если оно есть.
Использование
Request.PostDataBuffer
Возвращает
PostDataJSON
Добавлено в: v1.12Возвращает разобранное тело запроса для form-urlencoded
и JSON в качестве резервного варианта, если оно есть.
Когда ответ application/x-www-form-urlencoded
, возвращается объект ключ/значение значений. В противном случае он будет разобран как JSON.
Использование
Request.PostDataJSON
Возвращает
RedirectedFrom
Добавлено до v1.9Запрос, который был перенаправлен сервером на этот, если таковой имеется.
Когда сервер отвечает перенаправлением, Playwright создает новый объект Request. Два запроса связаны методами redirectedFrom()
и redirectedTo()
. Когда произошло несколько перенаправлений сервера, можно построить всю цепочку перенаправлений, многократно вызывая redirectedFrom()
.
Использование
Например, если веб-сайт http://example.com
перенаправляет на https://example.com
:
var response = await page.GotoAsync("http://www.microsoft.com");
Console.WriteLine(response.Request.RedirectedFrom?.Url); // http://www.microsoft.com
Если веб-сайт https://google.com
не имеет перенаправлений:
var response = await page.GotoAsync("https://www.google.com");
Console.WriteLine(response.Request.RedirectedFrom?.Url); // null
Возвращает
RedirectedTo
Добавлено до v1.9Новый запрос, отправленный браузером, если сервер ответил перенаправлением.
Использование
Этот метод является противоположностью Request.RedirectedFrom:
Console.WriteLine(request.RedirectedFrom?.RedirectedTo == request); // True
Возвращает
ResourceType
Добавлено до v1.9Содержит тип ресурса запроса, как он был воспринят движком рендеринга. ResourceType будет одним из следующих: document
, stylesheet
, image
, media
, font
, script
, texttrack
, xhr
, fetch
, eventsource
, websocket
, manifest
, other
.
Использование
Request.ResourceType
Возвращает
ResponseAsync
Добавлено до v1.9Возвращает соответствующий объект Response, или null
, если ответ не был получен из-за ошибки.
Использование
await Request.ResponseAsync();
Возвращает
SizesAsync
Добавлено в: v1.15Возвращает информацию о размере ресурса для данного запроса.
Использование
await Request.SizesAsync();
Возвращает
- Sizes#
-
requestBodySize
intРазмер тела запроса (POST данных) в байтах. Установлено в 0, если тела не было.
-
requestHeadersSize
intОбщее количество байтов от начала HTTP сообщения запроса до (и включая) двойной CRLF перед телом.
-
responseBodySize
intРазмер полученного тела ответа (закодированного) в байтах.
-
responseHeadersSize
intОбщее количество байтов от начала HTTP сообщения ответа до (и включая) двойной CRLF перед телом.
-
Timing
Добавлено до v1.9Возвращает информацию о времени ресурса для данного запроса. Большинство значений времени становятся доступны при получении ответа, responseEnd
становится доступным, когда запрос завершается. Подробнее см. Resource Timing API.
Использование
var request = await page.RunAndWaitForRequestFinishedAsync(async () =>
{
await page.GotoAsync("https://www.microsoft.com");
});
Console.WriteLine(request.Timing.ResponseEnd);
Возвращает
- Timing#
-
startTime
[float]Время начала запроса в миллисекундах, прошедших с 1 января 1970 года 00:00:00 UTC
-
domainLookupStart
[float]Время непосредственно перед тем, как браузер начинает поиск доменного имени для ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
domainLookupEnd
[float]Время непосредственно после того, как браузер начинает поиск доменного имени для ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
connectStart
[float]Время непосредственно перед тем, как пользовательский агент начинает устанавливать соединение с сервером для получения ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
secureConnectionStart
[float]Время непосредственно перед тем, как браузер начинает процесс рукопожатия для защиты текущего соединения. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
connectEnd
[float]Время непосредственно перед тем, как пользовательский агент начинает устанавливать соединение с сервером для получения ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
requestStart
[float]Время непосредственно перед тем, как браузер начинает запрашивать ресурс с сервера, из кэша или локального ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
responseStart
[float]Время непосредственно после того, как браузер получает первый байт ответа от сервера, из кэша или локального ресурса. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно. -
responseEnd
[float]Время непосредственно после того, как браузер получает последний байт ресурса или непосредственно перед закрытием транспортного соединения, в зависимости от того, что произойдет раньше. Значение указано в миллисекундах относительно
startTime
, -1, если недоступно.
-
Url
Добавлено до v1.9URL запроса.
Использование
Request.Url
Возвращает