Puppeteer 請(qǐng)求

2020-06-29 14:42 更新

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ì)象,如果有的話
    • errorText <string> 人類可讀的錯(cuò)誤信息,例如,'net::ERR_FAILED'。 requestfailed 事件觸發(fā)后,在沒(méi)有請(qǐng)求失敗的情況下,這個(gè)方法會(huì)返回 null。 輸出所有失敗請(qǐng)求示例:
      page.on('requestfailed', request => {  console.log(request.url() + ' ' + request.failure().errorText);});

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。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)