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

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

Added in: v1.15 request.all_headers

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

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

request.all_headers()

Возвращает


header_value

Added in: v1.15 request.header_value

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

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

request.header_value(name)

Arguments

  • name str#

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

Возвращает


headers_array

Added in: v1.15 request.headers_array

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

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

request.headers_array()

Возвращает

  • List[Dict]#
    • name str

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

    • value str

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


response

Added before v1.9 request.response

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

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

request.response()

Возвращает


sizes

Added in: v1.15 request.sizes

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

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

request.sizes()

Возвращает

  • Dict#
    • requestBodySize int

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

    • requestHeadersSize int

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

    • responseBodySize int

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

    • responseHeadersSize int

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


Свойства

failure

Added before v1.9 request.failure

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

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

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

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

Возвращает


frame

Added before v1.9 request.frame

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

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

frame_url = request.frame.url

Возвращает

Details

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

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

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


headers

Added before v1.9 request.headers

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

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

request.headers

Возвращает


is_navigation_request

Added before v1.9 request.is_navigation_request

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

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

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

request.is_navigation_request()

Возвращает


method

Added before v1.9 request.method

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

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

request.method

Возвращает


post_data

Added before v1.9 request.post_data

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

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

request.post_data

Возвращает


post_data_buffer

Added before v1.9 request.post_data_buffer

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

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

request.post_data_buffer

Возвращает


post_data_json

Added before v1.9 request.post_data_json

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

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

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

request.post_data_json

Возвращает


redirected_from

Added before 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

Added before v1.9 request.redirected_to

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

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

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

assert request.redirected_from.redirected_to == request

Возвращает


resource_type

Added before v1.9 request.resource_type

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

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

request.resource_type

Возвращает


timing

Added before 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

Возвращает