Route
每当使用 Page.RouteAsync() 或 BrowserContext.RouteAsync() 设置网络路由时,Route
对象可用于处理该路由。
了解更多关于 网络 的信息。
方法
AbortAsync
在 v1.9 之前添加中止路由的请求。
用法
await Route.AbortAsync(errorCode);
参数
-
可选的错误代码。默认为
failed
,可以是以下值之一:'aborted'
- 操作被中止(由于用户操作)'accessdenied'
- 访问资源(而非网络)的权限被拒绝'addressunreachable'
- IP 地址不可达。这通常意味着没有到指定主机或网络的路由。'blockedbyclient'
- 客户端选择阻止该请求。'blockedbyresponse'
- 请求失败,因为响应附带了未满足的要求(例如,“X-Frame-Options”和“Content-Security-Policy”祖先检查)。'connectionaborted'
- 由于未收到已发送数据的确认,连接超时。'connectionclosed'
- 连接已关闭(对应于 TCP FIN)。'connectionfailed'
- 连接尝试失败。'connectionrefused'
- 连接尝试被拒绝。'connectionreset'
- 连接被重置(对应于 TCP RST)。'internetdisconnected'
- 网络连接已丢失。'namenotresolved'
- 主机名无法解析。'timedout'
- 操作超时。'failed'
- 发生一般故障。
返回值
ContinueAsync
在 v1.9 之前添加将路由的请求发送到网络,并可选择覆盖一些参数。
用法
await page.RouteAsync("**/*", async route =>
{
var headers = new Dictionary<string, string>(route.Request.Headers) { { "foo", "bar" } };
headers.Remove("origin");
await route.ContinueAsync(new() { Headers = headers });
});
参数
options
RouteContinueOptions?
(可选)
返回值
详细信息
Headers 选项同时适用于路由请求及其发起的任何重定向。但是,Url、Method 和 PostData 仅适用于原始请求,不会延续到重定向请求。
Route.ContinueAsync() 会立即将请求发送到网络,其他匹配的处理程序将不会被调用。如果希望调用链中的下一个匹配处理程序,请使用 Route.FallbackAsync()。
无法使用此方法覆盖 Cookie
标头。如果提供了一个值,它将被忽略,并且 cookie 将从浏览器的 cookie 存储中加载。要设置自定义 cookie,请使用 BrowserContext.AddCookiesAsync()。
FallbackAsync
新增于:v1.23使用可选的覆盖参数继续路由请求。此方法类似于 Route.ContinueAsync(),不同之处在于在发送请求之前将调用其他匹配的处理程序。
用法
当多个路由匹配给定模式时,它们将按照与注册顺序相反的顺序运行。这样,最后注册的路由始终可以覆盖之前的所有路由。在下面的示例中,请求将首先由最下面的处理程序处理,然后回退到上一个处理程序,最后由第一个注册的路由中止。
await page.RouteAsync("**/*", route => {
// 最后运行。
await route.AbortAsync();
});
await page.RouteAsync("**/*", route => {
// 第二个运行。
await route.FallbackAsync();
});
await page.RouteAsync("**/*", route => {
// 首先运行。
await route.FallbackAsync();
});
当你希望使用不同的处理程序来处理不同类型的请求时,注册多个路由会很有用,例如,如下示例中,将 API 调用与页面资源分开处理,或者将 GET 请求与 POST 请求分开处理。
// 处理 GET 请求。
await page.RouteAsync("**/*", route => {
if (route.Request.Method != "GET") {
await route.FallbackAsync();
return;
}
// 仅处理 GET 请求。
// ...
});
// 处理 POST 请求。
await page.RouteAsync("**/*", route => {
if (route.Request.Method != "POST") {
await route.FallbackAsync();
return;
}
// 仅处理 POST 请求。
// ...
});
在回退到后续处理程序时,还可以修改请求,这样中间的路由处理程序就可以修改请求的 URL、方法、标头和 postData
。
await page.RouteAsync("**/*", async route =>
{
var headers = new Dictionary<string, string>(route.Request.Headers) { { "foo", "foo-value" } };
headers.Remove("bar");
await route.FallbackAsync(new() { Headers = headers });
});
使用 Route.ContinueAsync() 可立即将请求发送到网络,在这种情况下,不会调用其他匹配的处理程序。
参数
options
RouteFallbackOptions?
(可选)
返回值
FetchAsync
新增于:v1.29执行请求并获取结果,但不完成请求,以便可以修改响应,然后再完成请求。
用法
await page.RouteAsync("https://dog.ceo/api/breeds/list/all", async route =>
{
var response = await route.FetchAsync();
dynamic json = await response.JsonAsync();
json.message.big_red_dog = new string[] {};
await route.FulfillAsync(new() { Response = response, Json = json });
});
参数
options
RouteFetchOptions?
(可选)-
Headers
IDictionary?<string, string> (可选)#如果设置,将更改请求的 HTTP 标头。标头值将转换为字符串。
-
MaxRedirects
int? (可选) 新增于:v1.31#自动跟随的请求重定向的最大数量。如果超过此数量,将抛出错误。默认为
20
。传入0
则不跟随重定向。 -
MaxRetries
int? (可选) 新增于:v1.46#网络错误应重试的最大次数。目前仅重试
ECONNRESET
错误。不会基于 HTTP 响应代码进行重试。如果超过限制,将抛出错误。默认为0
- 不重试。 -
如果设置,将更改请求方法(例如 GET 或 POST)。
-
如果设置,将更改请求的 POST 数据。
-
Timeout
[float]? (可选) 新增于:v1.33#请求超时时间(毫秒)。默认为
30000
(30 秒)。传入0
可禁用超时。 -
如果设置,将更改请求 URL。新 URL 必须与原始 URL 具有相同的协议。
-
返回值
详细信息
请注意,Headers 选项将应用于获取的请求及其发起的任何重定向。如果你只想将 Headers 应用于原始请求,而不应用于重定向,请改用 Route.ContinueAsync()。
FulfillAsync
在 v1.9 之前添加使用给定的响应来满足路由的请求。
用法
用 404 响应满足所有请求的示例:
await page.RouteAsync("**/*", route => route.FulfillAsync(new ()
{
Status = 404,
ContentType = "text/plain",
Body = "Not Found!"
}));
提供静态文件的示例:
await page.RouteAsync("**/xhr_endpoint", route => route.FulfillAsync(new() { Path = "mock_data.json" }));
参数
options
RouteFulfillOptions?
(可选)-
可选的响应正文,以文本形式表示。
-
可选的响应正文,以原始字节形式表示。
-
如果设置了该参数,则等同于设置
Content-Type
响应头。 -
Headers
IDictionary?<string, string>(可选)#响应头。头的值将被转换为字符串。
-
Json
[object]?(可选) 新增于:v1.29#JSON 响应。如果未设置,此方法将把内容类型设置为
application/json
。 -
用于响应的文件路径。内容类型将从文件扩展名推断得出。如果
path
是相对路径,则相对于当前工作目录进行解析。 -
Response
APIResponse?(可选) 新增于:v1.15#APIResponse,用于满足路由的请求。可以使用满足选项覆盖响应的各个字段(如头信息)。
-
响应状态码,默认为
200
。
-
返回值
Request
在 v1.9 之前添加要路由的请求。
用法
Route.Request
返回值