# class:request
### class: Request v0.9.0
每當頁面發送一個請求,例如網絡請求,以下事件會被 puppeteer 頁面觸發:
- ['request'](#?product=Puppeteer&version=v1.11.0&show=api-event-request) 當請求發起后頁面會觸發這個事件。
- ['response'](#?product=Puppeteer&version=v1.11.0&show=api-event-response) 請求收到響應的時候觸發。
- ['requestfinished'](#?product=Puppeteer&version=v1.11.0&show=api-event-requestfinished) 請求完成并且響應體下載完成時觸發
如果某些時候請求失敗,后續不會觸發 'requestfinished' 事件(可能也不會觸發 'response' 事件),而是觸發 ['requestfailed'](#?product=Puppeteer&version=v1.11.0&show=api-event-requestfailed) 事件
如果請求得到一個重定向的響應,請求會成功地觸發 'requestfinished' 事件,并且對重定向的 `url` 發起一個新的請求
#### Methods
- [request.abort(\[errorCode\])](#?product=Puppeteer&version=v1.11.0&show=api-requestaborterrorcode)v0.9.0
- [request.continue(\[overrides\])](#?product=Puppeteer&version=v1.11.0&show=api-requestcontinueoverrides)v0.9.0
- [request.failure()](#?product=Puppeteer&version=v1.11.0&show=api-requestfailure)v0.9.0
- [request.frame()](#?product=Puppeteer&version=v1.11.0&show=api-requestframe)v0.9.0
- [request.headers()](#?product=Puppeteer&version=v1.11.0&show=api-requestheaders)v0.9.0
- [request.isNavigationRequest()](#?product=Puppeteer&version=v1.11.0&show=api-requestisnavigationrequest)v0.9.0
- [request.method()](#?product=Puppeteer&version=v1.11.0&show=api-requestmethod)v0.9.0
- [request.postData()](#?product=Puppeteer&version=v1.11.0&show=api-requestpostdata)v0.9.0
- [request.redirectChain()](#?product=Puppeteer&version=v1.11.0&show=api-requestredirectchain)v0.9.0
- [request.resourceType()](#?product=Puppeteer&version=v1.11.0&show=api-requestresourcetype)v0.9.0
- [request.respond(response)](#?product=Puppeteer&version=v1.11.0&show=api-requestrespondresponse)v0.9.0
- [request.response()](#?product=Puppeteer&version=v1.11.0&show=api-requestresponse)v0.9.0
- [request.url()](#?product=Puppeteer&version=v1.11.0&show=api-requesturl)v0.9.0
### Methods
#### request.abort(\[errorCode\])v0.9.0
- `errorCode` <[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String")> 可選的錯誤碼。默認為`failed`,可以是以下值:
- `aborted` - 操作被取消 (因為用戶的行為)
- `accessdenied` - 訪問資源權限不足(非網絡原因)
- `addressunreachable` - 找不到IP地址 這通常意味著沒有路由通向指定主機或者網絡
- `blockedbyclient` - 客戶端選擇阻止請求
- `blockedbyresponse` - 請求失敗,因為響應是與未滿足的要求一起傳遞出去的(例如,'X-Frame-Options' 和'Content-Security-Policy' 祖先檢查)
- `connectionaborted` - 未收到數據發送的ACK信號導致的連接超時
- `connectionclosed` - 連接關閉(對應 TCP FIN 包)
- `connectionfailed` - 嘗試連接失敗。
- `connectionrefused` - 嘗試連接拒絕。
- `connectionreset` - 連接被重置 (對應 TCP RST 包)。
- `internetdisconnected` - 網絡連接丟失。
- `namenotresolved` - 主機名字無法被解析。
- `timedout` - 操作超時。
- `failed` - 發生通用錯誤。
- returns: <[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise")>
想要中斷請求,應該使用 `page.setRequestInterception` 來開啟請求攔截,如果請求攔截沒有開啟會立即拋出異常。
#### request.continue(\[overrides\])v0.9.0
- `overrides` <[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object")> 可選的請求覆寫選項,可以是以下值中的一個:
- `url` <[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String")> 如果設置的話,請求 url 將會改變
- `method` <[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String")> 如果設置的話,會改變請求方法 (例如,`GET` 或者 `POST`)
- `postData` <[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String")> 如果設置的話,會改變請求要提交的數據
- `headers` <[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object")> 如果設置的話,改變 http 請求頭
- returns: <[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise")>
想要用可選的請求覆寫選項繼續請求,應該使用 `page.setRequestInterception` 來開啟請求攔截,如果請求攔截沒有開啟會立即拋出異常
#### request.failure()v0.9.0
- returns: <?[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object")> 描述請求失敗的對象,如果有的話
- `errorText` <[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String")> 人類可讀的錯誤信息,例如,`'net::ERR_FAILED'`。
`requestfailed` 事件觸發后,在沒有請求失敗的情況下,這個方法會返回 `null`。
輸出所有失敗請求示例:
```
page.on('requestfailed', request => { console.log(request.url() + ' ' + request.failure().errorText);});
```
#### request.frame()v0.9.0
- returns: <?[Frame](#?product=Puppeteer&version=v1.11.0&show=api-class-frame "Frame")> 發起請求的 [Frame](#?product=Puppeteer&version=v1.11.0&show=api-class-frame "Frame"),如果導航到錯誤頁面,則為`null`。
#### request.headers()v0.9.0
- returns: <[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object")> 該請求的 http 頭對象。所有頭都采用小寫的命名方式
#### request.isNavigationRequest()v0.9.0
- returns: <[boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type "Boolean")>
這個請求是否正在驅動框架在導航。
#### request.method()v0.9.0
- returns: <[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String")> 請求方法 ( GET,POST,等。)
#### request.postData()v0.9.0
- returns: <[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String")> 請求提交的數據。
#### request.redirectChain()v0.9.0
- returns: <[Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array "Array")<[Request](#?product=Puppeteer&version=v1.11.0&show=api-class-request "Request")>>
`redirectChain` 是一條獲取資源的請求鏈
- 如果沒有被重定向而且請求成功的話, 鏈路將會被置空
- 如果服務器至少響應了一次重定向, 那么這條鏈路將會包含所有重定向請求
`redirectChain` 會共享相同鏈路上的所有請求。
舉個例子,如果網站 `http://example.com` 重定向一次到 `https://example.com`,那么這條鏈就會包含一個請求:
```
const response = await page.goto('http://example.com');const chain = response.request().redirectChain();console.log(chain.length); // 1console.log(chain[0].url()); // 'http://example.com'
```
如果網站 `https://google.com` 沒有重定向,那么鏈(數組)就會被置空:
```
const response = await page.goto('https://google.com');const chain = response.request().redirectChain();console.log(chain.length); // 0
```
#### request.resourceType()v0.9.0
- returns: <[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String")>
包含渲染引擎識別出的請求資源類型 資源類型為以下值中的一個:`document`,`stylesheet`,`image`,`media`,`font`,`script`,`texttrack`,`xhr`,`fetch`,`eventsource`,`websocket`,`manifest`,`other`。
#### request.respond(response)v0.9.0
- `response` <[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object")> 完成請求的響應對象
- `status` <[number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type "Number")> 響應狀態碼,默認為 `200`。
- `headers` <[Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object "Object")> 可選的響應頭
- `contentType` <[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String")> 設置的話,等同于 `Content-Type` 響應頭
- `body` <[Buffer](https://nodejs.org/api/buffer.html#buffer_class_buffer "Buffer")|[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String")> 可選的響應體
- returns: <[Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise "Promise")>
完成請求后會返回一個響應。可以通過開啟 `page.setRequestInterception` 選項來使用請求攔截,如果請求攔截沒有開啟則會拋出異常。
下面例子中,所有執行完成的請求都會返回 404 響應體
```
await page.setRequestInterception(true);page.on('request', request => { request.respond({ status: 404, contentType: 'text/plain', body: 'Not Found!' });});
```
> **注意**`request.respond` 不支持模擬響應 `dataURL` 請求。 對 `dataURL`請求使用 `request.respond` 并不會起任何作用。
#### request.response()v0.9.0
- returns: <?[Response](#?product=Puppeteer&version=v1.11.0&show=api-class-response "Response")> 相應的 Response 對象,如果沒有收到響應則是`null`。
#### request.url()v0.9.0
- returns: <[string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type "String")> 請求的 URL。

puppeteer.js中文網|class:request
puppeteer.js中文文檔, puppeteer chrome, puppeteer firefox, puppeteer api 中文文檔
puppeteer.js中文網包含了Puppeteer中文文檔,最新資訊,應用案例等。Puppeteer 是一個 Node 庫,它提供了一個高級 API 來通過 DevTools 協議控制 Chromium 或 Chrome。
- Introduction
- 版本記錄
- 概要
- puppeteer-vs-puppeteer-core
- 環境變量
- error-handling
- working-with-chrome-extensions
- class:puppeteer
- class:browserfetcher
- class:browser
- class:page
- class:worker
- class:accessibility
- class:keyboard
- class:mouse
- class:touchscreen
- class:tracing
- class:dialog
- class:consolemessage
- class:frame
- class:executioncontext
- class:jshandle
- class:elementhandle
- class:request
- class:response
- class:securitydetails
- class:target
- class:cdpsession
- class:coverage
- class:timeouterror