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

Request

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

  • Page.Request генерируется, когда запрос отправляется страницей.
  • Page.Response генерируется, когда/если получены статус и заголовки ответа на запрос.
  • Page.RequestFinished генерируется, когда тело ответа загружено и запрос завершен.

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

примечание

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

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


Методы

AllHeadersAsync

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

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

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

await Request.AllHeadersAsync();

Возвращает


Failure

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

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

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

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

page.RequestFailed += (_, request) =>
{
Console.WriteLine(request.Failure);
};

Возвращает


Frame

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

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

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

var frameUrl = request.Frame.Url;

Возвращает

Детали

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

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

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


HeaderValueAsync

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

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

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

await Request.HeaderValueAsync(name);

Аргументы

  • name string#

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

Возвращает


Headers

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

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

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

Request.Headers

Возвращает


HeadersArrayAsync

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

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

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

await Request.HeadersArrayAsync();

Возвращает


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

Возвращает


PostDataJSON

Добавлено в: v1.12 request.PostDataJSON

Возвращает разобранное тело запроса для form-urlencoded и JSON в качестве резервного варианта, если оно есть.

Когда ответ application/x-www-form-urlencoded, возвращается объект ключ/значение значений. В противном случае он будет разобран как JSON.

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

Request.PostDataJSON

Возвращает


RedirectedFrom

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

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

Когда сервер отвечает перенаправлением, 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.RedirectedTo

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

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

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

Console.WriteLine(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

Возвращает


ResponseAsync

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

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

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

await Request.ResponseAsync();

Возвращает


SizesAsync

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

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

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

await Request.SizesAsync();

Возвращает

  • Sizes#
    • requestBodySize int

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

    • requestHeadersSize int

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

    • responseBodySize int

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

    • responseHeadersSize int

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


Timing

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

Возвращает информацию о времени ресурса для данного запроса. Большинство значений времени становятся доступны при получении ответа, 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.9 request.Url

URL запроса.

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

Request.Url

Возвращает