🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 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。 ![](images/pptr.png) puppeteer.js中文网|class:request puppeteer.js中文文档, puppeteer chrome, puppeteer firefox, puppeteer api 中文文档 puppeteer.js中文网包含了Puppeteer中文文档,最新资讯,应用案例等。Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。