class:request
class: Request v0.9.0
每當(dāng)頁面發(fā)送一個請求,例如網(wǎng)絡(luò)請求,以下事件會被 puppeteer 頁面觸發(fā):
'request'
當(dāng)請求發(fā)起后頁面會觸發(fā)這個事件。
'response'
請求收到響應(yīng)的時候觸發(fā)。
'requestfinished'
請求完成并且響應(yīng)體下載完成時觸發(fā)
如果某些時候請求失敗,后續(xù)不會觸發(fā) 'requestfinished'
事件(可能也不會觸發(fā) 'response' 事件),而是觸發(fā) 'requestfailed'
事件
如果請求得到一個重定向的響應(yīng),請求會成功地觸發(fā) 'requestfinished'
事件,并且對重定向的 url 發(fā)起一個新的請求
Methods
- request.abort([errorCode])v0.9.0
- request.continue([overrides])v0.9.0
- request.failure()v0.9.0
- request.frame()v0.9.0
- request.headers()v0.9.0
- request.isNavigationRequest()v0.9.0
- request.method()v0.9.0
- request.postData()v0.9.0
- request.redirectChain()v0.9.0
- request.resourceType()v0.9.0
- request.respond(response)v0.9.0
- request.response()v0.9.0
- request.url()v0.9.0
Methods
request.abort([errorCode])v0.9.0
- errorCode <string> 可選的錯誤碼。默認為failed,可以是以下值:
- aborted - 操作被取消 (因為用戶的行為)
- accessdenied - 訪問資源權(quán)限不足(非網(wǎng)絡(luò)原因)
- addressunreachable - 找不到IP地址 這通常意味著沒有路由通向指定主機或者網(wǎng)絡(luò)
- blockedbyclient - 客戶端選擇阻止請求
- blockedbyresponse - 請求失敗,因為響應(yīng)是與未滿足的要求一起傳遞出去的(例如,'X-Frame-Options' 和'Content-Security-Policy' 祖先檢查)
- connectionaborted - 未收到數(shù)據(jù)發(fā)送的ACK信號導(dǎo)致的連接超時
- connectionclosed - 連接關(guān)閉(對應(yīng) TCP FIN 包)
- connectionfailed - 嘗試連接失敗。
- connectionrefused - 嘗試連接拒絕。
- connectionreset - 連接被重置 (對應(yīng) TCP RST 包)。
- internetdisconnected - 網(wǎng)絡(luò)連接丟失。
- namenotresolved - 主機名字無法被解析。
- timedout - 操作超時。
- failed - 發(fā)生通用錯誤。
- returns: <Promise>
想要中斷請求,應(yīng)該使用 page.setRequestInterception 來開啟請求攔截,如果請求攔截沒有開啟會立即拋出異常。
- request.continue([overrides])v0.9.0
overrides <Object> 可選的請求覆寫選項,可以是以下值中的一個:
- url <string> 如果設(shè)置的話,請求 url 將會改變
- method <string> 如果設(shè)置的話,會改變請求方法 (例如,GET 或者 POST)
- postData <string> 如果設(shè)置的話,會改變請求要提交的數(shù)據(jù)
- headers <Object> 如果設(shè)置的話,改變 - http 請求頭
- returns: <Promise>
想要用可選的請求覆寫選項繼續(xù)請求,應(yīng)該使用 page.setRequestInterception 來開啟請求攔截,如果請求攔截沒有開啟會立即拋出異常
request.failure()v0.9.0
- returns: <?Object> 描述請求失敗的對象,如果有的話
request.frame()v0.9.0
- returns: <?Frame> 發(fā)起請求的 Frame,如果導(dǎo)航到錯誤頁面,則為null。
request.headers()v0.9.0
- returns: <Object> 該請求的 http 頭對象。所有頭都采用小寫的命名方式
request.isNavigationRequest()v0.9.0
- returns: <boolean>
這個請求是否正在驅(qū)動框架在導(dǎo)航。
request.method()v0.9.0
- returns: <string> 請求方法 ( GET,POST,等。)
request.postData()v0.9.0
- returns: <string> 請求提交的數(shù)據(jù)。
request.redirectChain()v0.9.0
- returns: <Array<Request>>
redirectChain 是一條獲取資源的請求鏈
- 如果沒有被重定向而且請求成功的話, 鏈路將會被置空
- 如果服務(wù)器至少響應(yīng)了一次重定向, 那么這條鏈路將會包含所有重定向請求
redirectChain 會共享相同鏈路上的所有請求。
舉個例子,如果網(wǎng)站 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'
如果網(wǎng)站 https://google.com 沒有重定向,那么鏈(數(shù)組)就會被置空:
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>
包含渲染引擎識別出的請求資源類型 資源類型為以下值中的一個:document,stylesheet,image,media,font,script,texttrack,xhr,fetch,eventsource,websocket,manifest,other。
request.respond(response)v0.9.0
- response <Object> 完成請求的響應(yīng)對象
- status <number> 響應(yīng)狀態(tài)碼,默認為 200。
- headers <Object> 可選的響應(yīng)頭
- contentType <string> 設(shè)置的話,等同于 Content-Type 響應(yīng)頭
- body <Buffer|string> 可選的響應(yīng)體
- returns: <Promise>
完成請求后會返回一個響應(yīng)??梢酝ㄟ^開啟 page.setRequestInterception 選項來使用請求攔截,如果請求攔截沒有開啟則會拋出異常。
下面例子中,所有執(zhí)行完成的請求都會返回 404 響應(yīng)體
await page.setRequestInterception(true);
page.on('request', request = >{
request.respond({
status: 404,
contentType: 'text/plain',
body: 'Not Found!'
});
});
注意request.respond 不支持模擬響應(yīng) dataURL 請求。 對 dataURL請求使用 request.respond 并不會起任何作用。
request.response()v0.9.0
- returns: <?Response> 相應(yīng)的 Response 對象,如果沒有收到響應(yīng)則是null。
request.url()v0.9.0
- returns: <string> 請求的 URL。
更多建議: