webRequest web请求
观察和分析流量,并拦截、阻止或修改正在进行的请求。
权限
"permissions": [
"webRequest",
"webRequestBlocking",
"*://*.google.com/*"
]
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 请求不支持重定向