Skip to main content

Request

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

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

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

note

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

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


Methods

allHeaders

Added in: v1.15 request.allHeaders

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

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

await request.allHeaders();

Возвращает

  • [Promise]<[Object]<[string], [string]>>#

failure

Added before v1.9 request.failure

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

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

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

page.on('requestfailed', request => {
console.log(request.url() + ' ' + request.failure().errorText);
});

Возвращает

  • [null] | [Object]#
    • errorText [string]

      Человекочитаемое сообщение об ошибке, например, 'net::ERR_FAILED'.


frame

Added before v1.9 request.frame

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

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

const frameUrl = request.frame().url();

Возвращает

  • [Frame]#

Детали

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

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

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

if (request.serviceWorker())
console.log(`request ${request.url()} from a service worker`);
else if (request.isNavigationRequest())
console.log(`request ${request.url()} is a navigation request`);
else
console.log(`request ${request.url()} from a frame ${request.frame().url()}`);

headerValue

Added in: v1.15 request.headerValue

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

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

await request.headerValue(name);

Аргументы

  • name [string]#

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

Возвращает

  • [Promise]<[null] | [string]>#

headers

Added before v1.9 request.headers

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

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

request.headers();

Возвращает

  • [Object]<[string], [string]>#

headersArray

Added in: v1.15 request.headersArray

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

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

await request.headersArray();

Возвращает

  • [Promise]<[Array]<[Object]>>#
    • name [string]

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

    • value [string]

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


isNavigationRequest

Added before v1.9 request.isNavigationRequest

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

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

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

request.isNavigationRequest();

Возвращает

  • [boolean]#

method

Added before v1.9 request.method

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

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

request.method();

Возвращает

  • [string]#

postData

Added before v1.9 request.postData

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

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

request.postData();

Возвращает

  • [null] | [string]#

postDataBuffer

Added before v1.9 request.postDataBuffer

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

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

request.postDataBuffer();

Возвращает

  • [null] | [Buffer]#

postDataJSON

Added before v1.9 request.postDataJSON

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

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

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

request.postDataJSON();

Возвращает

  • [null] | [Serializable]#

redirectedFrom

Added before v1.9 request.redirectedFrom

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

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

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

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

const response = await page.goto('http://example.com');
console.log(response.request().redirectedFrom().url()); // 'http://example.com'

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

const response = await page.goto('https://google.com');
console.log(response.request().redirectedFrom()); // null

Возвращает

  • [null] | [Request]#

redirectedTo

Added before v1.9 request.redirectedTo

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

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

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

console.log(request.redirectedFrom().redirectedTo() === request); // true

Возвращает

  • [null] | [Request]#

resourceType

Added before v1.9 request.resourceType

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

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

request.resourceType();

Возвращает

  • [string]#

response

Added before v1.9 request.response

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

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

await request.response();

Возвращает

  • [Promise]<[null] | [Response]>#

serviceWorker

Added in: v1.24 request.serviceWorker

Service [Worker], который выполняет запрос.

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

request.serviceWorker();

Возвращает

  • [null] | [Worker]#

Детали

Этот метод доступен только в Chromium. Его безопасно вызывать при использовании других браузеров, но он всегда будет возвращать null.

Запросы, исходящие из Service Worker, не имеют доступного request.frame().


sizes

Added in: v1.15 request.sizes

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

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

await request.sizes();

Возвращает

  • [Promise]<[Object]>#
    • requestBodySize [number]

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

    • requestHeadersSize [number]

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

    • responseBodySize [number]

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

    • responseHeadersSize [number]

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


timing

Added before v1.9 request.timing

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

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

const requestFinishedPromise = page.waitForEvent('requestfinished');
await page.goto('http://example.com');
const request = await requestFinishedPromise;
console.log(request.timing());

Возвращает

  • [Object]#
    • startTime [number]

      Время начала запроса в миллисекундах, прошедших с 1 января 1970 года 00:00:00 UTC

    • domainLookupStart [number]

      Время непосредственно перед тем, как браузер начинает поиск доменного имени для ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • domainLookupEnd [number]

      Время непосредственно после того, как браузер начинает поиск доменного имени для ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • connectStart [number]

      Время непосредственно перед тем, как пользовательский агент начинает устанавливать соединение с сервером для получения ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • secureConnectionStart [number]

      Время непосредственно перед тем, как браузер начинает процесс рукопожатия для защиты текущего соединения. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • connectEnd [number]

      Время непосредственно перед тем, как пользовательский агент начинает устанавливать соединение с сервером для получения ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • requestStart [number]

      Время непосредственно перед тем, как браузер начинает запрашивать ресурс с сервера, из кэша или локального ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • responseStart [number]

      Время непосредственно после того, как браузер получает первый байт ответа от сервера, из кэша или локального ресурса. Значение указано в миллисекундах относительно startTime, -1, если недоступно.

    • responseEnd [number]

      Время непосредственно после того, как браузер получает последний байт ресурса или непосредственно перед закрытием транспортного соединения, в зависимости от того, что произойдет раньше. Значение указано в миллисекундах относительно startTime, -1, если недоступно.


url

Added before v1.9 request.url

URL запроса.

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

request.url();

Возвращает

  • [string]#