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Объект со всеми HTTP заголовками запроса, связанными с этим запросом. Имена заголовков приведены к нижнему регистру.
Использование
request.all_headers()
Возвращает
header_value
Added in: v1.15Возвращает значение заголовка, соответствующего имени. Имя не чувствительно к регистру.
Использование
request.header_value(name)
Arguments
Возвращает
headers_array
Added in: v1.15Массив со всеми HTTP заголовками запроса, связанными с этим запросом. В отличие от request.all_headers(), имена заголовков НЕ приведены к нижнему регистру. Заголовки с несколькими записями, такие как Set-Cookie
, появляются в массиве несколько раз.
Использование
request.headers_array()
Возвращает
response
Added before v1.9Возвращает соответствующий объект Response, или null
, если ответ не был получен из-за ошибки.
Использование
request.response()
Возвращает
sizes
Added in: v1.15Возвращает информацию о размере ресурса для данного запроса.
Использование
request.sizes()
Возвращает
- Dict#
-
requestBodySize
intРазмер тела запроса (POST данные) в байтах. Установлено в 0, если тела не было.
-
requestHeadersSize
intОбщее количество байт от начала HTTP сообщения запроса до (и включая) двойной CRLF перед телом.
-
responseBodySize
intРазмер полученного тела ответа (закодированного) в байтах.
-
responseHeadersSize
intОбщее количество байт от начала HTTP сообщения ответа до (и включая) двойной CRLF перед телом.
-
Свойства
failure
Added before v1.9Метод возвращает null
, если только этот запрос не завершился неудачей, как сообщается событием requestfailed
.
Использование
Пример логирования всех неудачных запросов:
page.on("requestfailed", lambda request: print(request.url + " " + request.failure))
Возвращает
frame
Added before v1.9Возвращает Frame, который инициировал этот запрос.
Использование
frame_url = request.frame.url
Возвращает
Details
Обратите внимание, что в некоторых случаях фрейм недоступен, и этот метод вызовет ошибку.
- Когда запрос исходит из Service Worker. Вы можете использовать
request.serviceWorker()
для проверки этого. - Когда навигационный запрос отправляется до создания соответствующего фрейма. Вы можете использовать request.is_navigation_request() для проверки этого.
Вот пример, который обрабатывает все случаи:
headers
Added before v1.9Объект с HTTP заголовками запроса. Имена заголовков приведены к нижнему регистру. Обратите внимание, что этот метод не возвращает заголовки, связанные с безопасностью, включая связанные с cookie. Вы можете использовать request.all_headers() для полного списка заголовков, включающего информацию о cookie
.
Использование
request.headers
Возвращает
is_navigation_request
Added before v1.9Является ли этот запрос навигацией фрейма.
Некоторые навигационные запросы отправляются до создания соответствующего фрейма, и поэтому request.frame недоступен.
Использование
request.is_navigation_request()
Возвращает
method
Added before v1.9Метод запроса (GET, POST и т.д.)
Использование
request.method
Возвращает
post_data
Added before v1.9Тело запроса, если оно есть.
Использование
request.post_data
Возвращает
post_data_buffer
Added before v1.9Тело запроса в бинарной форме, если оно есть.
Использование
request.post_data_buffer
Возвращает
post_data_json
Added before v1.9Возвращает разобранное тело запроса для form-urlencoded
и JSON в качестве резервного варианта, если оно есть.
Когда ответ application/x-www-form-urlencoded
, будет возвращен объект ключ/значение значений. В противном случае он будет разобран как JSON.
Использование
request.post_data_json
Возвращает
redirected_from
Added before v1.9Запрос, который был перенаправлен сервером на этот, если таковой имеется.
Когда сервер отвечает перенаправлением, Playwright создает новый объект Request. Два запроса связаны методами redirectedFrom()
и redirectedTo()
. Когда произошло несколько перенаправлений сервера, можно построить всю цепочку перенаправлений, многократно вызывая redirectedFrom()
.
Использование
Например, если веб-сайт http://example.com
перенаправляет на https://example.com
:
- Sync
- Async
response = page.goto("http://example.com")
print(response.request.redirected_from.url) # "http://example.com"
response = await page.goto("http://example.com")
print(response.request.redirected_from.url) # "http://example.com"
Если веб-сайт https://google.com
не имеет перенаправлений:
- Sync
- Async
response = page.goto("https://google.com")
print(response.request.redirected_from) # None
response = await page.goto("https://google.com")
print(response.request.redirected_from) # None
Возвращает
redirected_to
Added before v1.9Новый запрос, отправленный браузером, если сервер ответил перенаправлением.
Использование
Этот метод является противоположностью request.redirected_from:
assert request.redirected_from.redirected_to == request
Возвращает
resource_type
Added before v1.9Содержит тип ресурса запроса, как он был воспринят движком рендеринга. ResourceType будет одним из следующих: document
, stylesheet
, image
, media
, font
, script
, texttrack
, xhr
, fetch
, eventsource
, websocket
, manifest
, other
.
Использование
request.resource_type
Возвращает
timing
Added before v1.9Возвращает информацию о времени ресурса для данного запроса. Большинство значений времени становятся доступными при ответе, responseEnd
становится доступным, когда запрос завершается. Найдите больше информации на Resource Timing API.
Использование
- Sync
- Async
with page.expect_event("requestfinished") as request_info:
page.goto("http://example.com")
request = request_info.value
print(request.timing)
async with page.expect_event("requestfinished") as request_info:
await page.goto("http://example.com")
request = await 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.9URL запроса.
Использование
request.url
Возвращает