跳到主要内容

webRequest web请求

官方文档

观察和分析流量,并拦截、阻止或修改正在进行的请求。

权限

"permissions": [
"webRequest",
"webRequestBlocking",
"*://*.google.com/*"
]

web请求的生命周期

web请求的生命周期

onBeforeRequest 请求开始前

在请求开始前触发,可以拦截请求、取消或重定向请求

type BlockingResponse = {
// 如果为 true,则取消请求。如果为 false,则允许请求。
cancel?: boolean;
// 如果设置了重定向 URL,则重定向到该 URL。
redirectUrl?: string;
// 如果设置了响应头,则使用该响应头。
responseHeaders?: HttpHeaders;
// 如果设置了状态码,则使用该状态码。
statusCode?: number;
// 如果设置了状态行,则使用该状态行。
statusLine?: string;
}

type BlockingResponseCallback = (response?: BlockingResponse) => void;

chrome.webRequest.onBeforeRequest.addListener(
callback: (details: WebRequestDetails) => BlockingResponse | Promise<BlockingResponse> | void,
filter: WebRequestFilter,
opt_extraInfoSpec?: string[],
)

onBeforeSendHeaders 请求发送前

在请求发送前触发,可以修改请求头

chrome.webRequest.onBeforeSendHeaders.addListener(
callback: (details: WebRequestDetails) => BlockingResponse | Promise<BlockingResponse> | void,
filter: WebRequestFilter,
opt_extraInfoSpec?: string[],
)

onSendHeaders 请求发送时

在请求发送时触发,可以修改请求头

chrome.webRequest.onSendHeaders.addListener(
callback: (details: WebRequestDetails) => void,
filter: WebRequestFilter,
opt_extraInfoSpec?: string[],
)

onHeadersReceived 收到响应头时

在收到响应头时触发,可以修改响应头

chrome.webRequest.onHeadersReceived.addListener(
callback: (details: WebRequestDetails) => BlockingResponse | Promise<BlockingResponse> | void,
filter: WebRequestFilter,
opt_extraInfoSpec?: string[],
)

onAuthRequired 需要身份验证时

在需要身份验证时触发,可以提供身份验证信息

type AuthCredentials = {
// 用户名
username: string;
// 密码
password: string;
}

chrome.webRequest.onAuthRequired.addListener(
callback: (details: WebRequestDetails) => BlockingResponse | Promise<BlockingResponse> | AuthCredentials | Promise<AuthCredentials> | void,
filter: WebRequestFilter,
opt_extraInfoSpec?: string[],
)

onBeforeRedirect 重定向前

在重定向前触发,可以修改重定向的 URL

chrome.webRequest.onBeforeRedirect.addListener(
callback: (details: WebRequestDetails) => void,
filter: WebRequestFilter,
opt_extraInfoSpec?: string[],
)

onResponseStarted 收到响应时

在收到响应时触发,可以获取响应信息

chrome.webRequest.onResponseStarted.addListener(
callback: (details: WebRequestDetails) => void,
filter: WebRequestFilter,
opt_extraInfoSpec?: string[],
)

onCompleted 请求完成时

在请求完成时触发,可以获取响应信息

chrome.webRequest.onCompleted.addListener(
callback: (details: WebRequestDetails) => void,
filter: WebRequestFilter,
opt_extraInfoSpec?: string[],
)

onErrorOccurred 请求出错时

在请求出错时触发,可以获取错误信息

chrome.webRequest.onErrorOccurred.addListener(
callback: (details: WebRequestDetails) => void,
filter: WebRequestFilter,
opt_extraInfoSpec?: string[],
)
提示

从 Chrome 58 开始,webRequest API 支持拦截 WebSocket 握手请求。由于握手是通过 HTTP 升级请求完成的,因此其流程适合面向 HTTP 的 webRequest 模型。请注意,API 不会拦截:

  • 通过已建立的 WebSocket 连接发送的单个消息
  • WebSocket 关闭连接
  • WebSocket 请求不支持重定向