Route
每当使用 page.route(url, handler[, options]) 或 browserContext.route(url, handler[, options]) 设置网络路由时,Route 对象允许处理该路由。
了解有关 网络 的更多信息。
- route.abort([errorCode])
- route.continue([options])
- route.fallback([options])
- route.fulfill([options])
- route.request()
route.abort([errorCode])
Added in: v1.8errorCode?<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<void>>#
中止路由的请求。
route.continue([options])
Added in:v1.8继续该路由上的请求,并可选择性覆盖部分请求参数。
await page.route('**/*', (route, request) => {
// 覆盖标头
const headers = {
...request.headers(),
foo: 'foo-value', // 设置 "foo" 标头
bar: undefined, // 删除 "bar" 标头
};
route.continue({headers});
});
route.fallback([options])
Added in: v1.23当多个路由匹配到同一模式时,它们会按照与注册顺序相反的顺序执行。这样,最后注册的路由始终可以覆盖之前的所有路由。在下面的示例中,请求将首先由最底部的处理器处理,然后回退到前一个,最后被第一个注册的路由终止。
await page.route('**/*', route => {
// 最后运行。
route.abort();
});
await page.route('**/*', route => {
// 第二个运行。
route.fallback();
});
await page.route('**/*', route => {
// 第一个运行。
route.fallback();
});
当您希望单独的处理程序处理不同类型的请求时,注册多个路由很有用,例如 API 调用与页面资源,或 GET 请求与 POST 请求,如下例所示。
// 处理 GET 请求。
await page.route('**/*', route => {
if (route.request().method() !== 'GET') {
route.fallback();
return;
}
// 仅处理 GET。
// ...
});
// 处理 POST 请求。
await page.route('**/*', route => {
if (route.request().method() !== 'POST') {
route.fallback();
return;
}
// 仅处理 POST。
// ...
});
也可以在回退到后续处理程序时修改请求,这样中间路由处理程序可以修改请求的 url、method、headers 和 postData。
await page.route('**/*', (route, request) => {
// 覆盖标头
const headers = {
...request.headers(),
foo: 'foo-value', // 设置 "foo" 标头
bar: undefined, // 删除 "bar" 标头
};
route.fallback({headers});
});
route.fulfill([options])
Added in: v1.8options?<Object>body?<string|Buffer> 响应体。#contentType?<string> 若设置,相当于设置响应头Content-Type。#headers?<Object<string, string>> 响应头部。所有头部值会被转换为字符串。#path?<string> 用于响应的文件路径。内容类型将根据文件扩展名推断。如果path是相对路径,则会基于当前工作目录进行解析。#response?<APIResponse> 用于 fulfill 路由请求的 APIResponse 对象。响应的单独字段(如 headers)可通过 fulfill 选项覆盖。新增于:v1.15#status?<number> 响应状态码,默认为200。#
- returns: <Promise<void>>#
使用指定的响应 fulfill 当前路由的请求。
以下是一个将所有请求都以 404 响应 fulfill 的示例:
await page.route('**/*', route => {
route.fulfill({
status: 404,
contentType: 'text/plain',
body: 'Not Found!'
});
});
提供静态文件的示例:
await page.route('**/xhr_endpoint', route => route.fulfill({ path: 'mock_data.json' }));
route.request()
Added in: v1.8要路由的请求。