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

Request

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

  • page.on("request") испускается, когда запрос отправляется страницей.
  • page.on("response") испускается, когда/если получены статус и заголовки ответа на запрос.
  • page.on("requestfinished") испускается, когда тело ответа загружено и запрос завершен.

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

примечание

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

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


Методы​

all_headers​

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

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

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

request.all_headers()

Возвращает


header_value​

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

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

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

request.header_value(name)

Аргументы

  • name str#

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

Возвращает


headers_array​

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

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

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

request.headers_array()

Возвращает

  • List[Dict]#
    • name str

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

    • value str

      Значение заголовка.


response​

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

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

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

request.response()

Возвращает


sizes​

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

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

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

request.sizes()

Возвращает

  • Dict#
    • requestBodySize int

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

    • requestHeadersSize int

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

    • responseBodySize int

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

    • responseHeadersSize int

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


Свойства​

failure​

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

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

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

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

page.on("requestfailed", lambda request: print(request.url + " " + request.failure))

Возвращает


frame​

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

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

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

frame_url = request.frame.url

Возвращает

Подробности

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

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

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


headers​

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

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

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

request.headers

Возвращает


is_navigation_request​

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

Является ли этот запрос навигацией фрейма.

Некоторые навигационные запросы отправляются до создания соответствующего фрейма, и поэтому request.frame недоступен.

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

request.is_navigation_request()

Возвращает


method​

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

Метод запроса (GET, POST и т.д.)

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

request.method

Возвращает


post_data​

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

Тело запроса, если оно есть.

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

request.post_data

Возвращает


post_data_buffer​

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

Тело запроса в бинарной форме, если оно есть.

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

request.post_data_buffer

Возвращает


post_data_json​

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

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

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

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

request.post_data_json

Возвращает


redirected_from​

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

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

Когда сервер отвечает перенаправлением, Playwright создает новый объект Request. Два запроса связаны методами redirectedFrom() и redirectedTo(). Когда произошло несколько перенаправлений сервера, можно построить всю цепочку перенаправлений, многократно вызывая redirectedFrom().

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

Например, если веб-сайт http://example.com перенаправляет на https://example.com:

response = page.goto("http://example.com")
print(response.request.redirected_from.url) # "http://example.com"

Если веб-сайт https://google.com не имеет перенаправлений:

response = page.goto("https://google.com")
print(response.request.redirected_from) # None

Возвращает


redirected_to​

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

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

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

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

assert request.redirected_from.redirected_to == request

Возвращает


resource_type​

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

Содержит тип ресурса запроса, как он был воспринят движком рендеринга. ResourceType будет одним из следующих: document, stylesheet, image, media, font, script, texttrack, xhr, fetch, eventsource, websocket, manifest, other.

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

request.resource_type

Возвращает


timing​

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

Возвращает информацию о времени ресурса для данного запроса. Большинство значений времени становятся доступными при ответе, responseEnd становится доступным, когда запрос завершается. Найдите больше информации на Resource Timing API.

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

with page.expect_event("requestfinished") as request_info:
page.goto("http://example.com")
request = request_info.value
print(request.timing)

Возвращает

  • Dict#
    • 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

Возвращает