路由
每当使用 page.route() 或 browserContext.route() 设置网络路由时,Route
对象都允许处理该路由。
了解更多关于 网络 的信息。
方法
abort
在 v1.9 之前添加中止路由的请求。
用法
await route.abort();
await route.abort(errorCode);
参数
-
可选错误代码。默认为
failed
,可以是以下之一:'aborted'
- 操作被中止(用户行为导致)'accessdenied'
- 访问资源(非网络资源)的权限被拒绝'addressunreachable'
- IP地址无法访问。这通常意味着到指定主机或网络没有路由。'blockedbyclient'
- 客户端选择阻止请求。'blockedbyresponse'
- 请求失败,因为响应附带的要求未被满足(例如,'X-Frame-Options' 和 'Content-Security-Policy' 的祖先检查)。'connectionaborted'
- 由于发送的数据未收到 ACK 导致连接超时。'connectionclosed'
- 连接已关闭(对应于 TCP FIN)。'connectionfailed'
- 连接尝试失败。'connectionrefused'
- 连接尝试被拒绝。'connectionreset'
- 连接被重置(对应于 TCP RST)。'internetdisconnected'
- Internet 连接已断开。'namenotresolved'
- 主机名无法解析。'timedout'
- 操作超时。'failed'
- 发生通用失败。
返回值
continue
在 v1.9 之前添加将路由的请求发送到网络,并可选择覆盖参数。
用法
await page.route('**/*', async (route, request) => {
// Override headers
const headers = {
...request.headers(),
foo: 'foo-value', // set "foo" header
bar: undefined, // remove "bar" header
};
await route.continue({ headers });
});
参数
options
Object (可选)
返回值
详情
headers
选项既适用于路由的请求,也适用于它发起的任何重定向。然而,url、method 和 postData 只适用于原始请求,不会传递给重定向请求。
route.continue()
将立即把请求发送到网络,不会调用其他匹配的处理程序。如果您想让链中的下一个匹配处理程序被调用,请使用 route.fallback()。
无法使用此方法覆盖 Cookie
头部。如果提供了值,它将被忽略,并且 cookie 将从浏览器的 cookie 存储中加载。要设置自定义 cookie,请使用 browserContext.addCookies()。
fallback
新增于: v1.23继续路由的请求,可选择覆盖参数。此方法与 route.continue() 类似,区别在于发送请求之前会调用其他匹配的处理程序。
用法
当多个路由匹配给定模式时,它们按照与其注册顺序相反的顺序运行。这样,最后注册的路由总能覆盖之前的所有路由。在下面的示例中,请求将首先由最底部的处理程序处理,然后回退到前一个处理程序,最后被第一个注册的路由中止。
await page.route('**/*', async route => {
// Runs last.
await route.abort();
});
await page.route('**/*', async route => {
// Runs second.
await route.fallback();
});
await page.route('**/*', async route => {
// Runs first.
await route.fallback();
});
注册多个路由非常有用,当您希望由不同的处理程序处理不同类型的请求时,例如 API 调用与页面资源,或者 GET 请求与 POST 请求,如下例所示。
// Handle GET requests.
await page.route('**/*', async route => {
if (route.request().method() !== 'GET') {
await route.fallback();
return;
}
// Handling GET only.
// ...
});
// Handle POST requests.
await page.route('**/*', async route => {
if (route.request().method() !== 'POST') {
await route.fallback();
return;
}
// Handling POST only.
// ...
});
回退到后续处理程序时,也可以修改请求,这样中间路由处理程序可以修改请求的 url、method、headers 和 postData。
await page.route('**/*', async (route, request) => {
// Override headers
const headers = {
...request.headers(),
foo: 'foo-value', // set "foo" header
bar: undefined, // remove "bar" header
};
await route.fallback({ headers });
});
使用 route.continue() 将立即把请求发送到网络,在这种情况下不会调用其他匹配的处理程序。
参数
options
Object (可选)
返回值
fetch
新增于: v1.29执行请求并获取结果而不完成它,这样可以修改响应然后完成它。
用法
await page.route('https://dog.ceo/api/breeds/list/all', async route => {
const response = await route.fetch();
const json = await response.json();
json.message['big_red_dog'] = [];
await route.fulfill({ response, json });
});
参数
options
Object (可选)-
headers
Object<string, string> (可选)#如果设置,则更改请求的 HTTP 头部。头部值将被转换为字符串。
-
maxRedirects
number (可选)新增于: v1.31#自动跟随的最大请求重定向次数。如果超过此次数将抛出错误。默认为
20
。传递0
则不跟随重定向。 -
maxRetries
number (可选)新增于: v1.46#网络错误应被重试的最大次数。目前只重试
ECONNRESET
错误。不基于 HTTP 响应代码进行重试。如果超出限制将抛出错误。默认为0
- 不重试。 -
如果设置,则更改请求方法(例如 GET 或 POST)。
-
postData
string | Buffer | Serializable (可选)#允许设置请求的 post 数据。如果 data 参数是对象,它将被序列化为 json 字符串,如果未显式设置
content-type
头部,则将其设置为application/json
。否则,如果未显式设置content-type
头部,则将其设置为application/octet-stream
。 -
timeout
number (可选)新增于: v1.33#请求超时时间(毫秒)。默认为
30000
(30 秒)。传递0
可禁用超时。 -
如果设置,则更改请求 URL。新的 URL 必须与原始 URL 使用相同的协议。
-
返回值
详情
请注意,headers 选项将应用于 fetch 的请求及其发起的任何重定向。如果您只想将 headers 应用于原始请求而不应用于重定向,请查看 route.continue()。
fulfill
在 v1.9 之前添加使用给定响应完成路由的请求。
用法
一个使用 404 响应完成所有请求的示例
await page.route('**/*', async route => {
await route.fulfill({
status: 404,
contentType: 'text/plain',
body: 'Not Found!'
});
});
一个服务静态文件的示例
await page.route('**/xhr_endpoint', route => route.fulfill({ path: 'mock_data.json' }));
参数
options
Object (可选)-
响应体。
-
如果设置,等同于设置
Content-Type
响应头部。 -
headers
Object<string, string> (可选)#响应头部。头部值将被转换为字符串。
-
json
Serializable (可选)新增于: v1.29#JSON 响应。如果未设置,此方法会将 content type 设置为
application/json
。 -
用于响应的文件路径。content type 将从文件扩展名推断。如果
path
是相对路径,则相对于当前工作目录解析。 -
response
APIResponse (可选)新增于: v1.15#用于完成路由请求的 APIResponse。可以使用 fulfill 选项覆盖响应的各个字段(例如头部)。
-
响应状态码,默认为
200
。
-
返回值
request
在 v1.9 之前添加要进行路由的请求。
用法
route.request();
返回值