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