修改请求头
在WebResourceRequested事件可以读取和修改请求头,下面是参考代码:
Dim
url
As
String
= e.Request.Uri.ToLower()
'获得要访问的资源路径并转为小写,方便比较
If
url.Contains("httpbin.org")
Then
'针对特定域名设置
'添加请求头
e.Request.Headers.SetHeader("Authorization",
"hulibaba")
'删除请求头
If
e.Request.Headers.Contains("Referer")
Then
e.Request.Headers.RemoveHeader("Referer")
End
If
'添加自定义请求头
e.Request.Headers.SetHeader("X-User-Name",
"jack")
e.Request.Headers.SetHeader("X-User-Password",
"123456")
'修改请求头
Dim
userAgent = e.Request.Headers.GetHeader("User-Agent")
e.Request.Headers.SetHeader("User-Agent",
userAgent +
"
foxtable2026")
'只对特定类型的资源修改
If
e.ResourceContext = CoreWebView2WebResourceContext.Script
Then
e.Request.Headers.SetHeader("X-Resource-Type",
"Script")
End
If
'根据请求方法添加不同的头
If
e.Request.Method =
"POST"
Then
e.Request.Headers.SetHeader("X-Request-Method",
"POST")
End
If
End
If
设置好之后,你可以在地址栏输入下面的地址:
https://httpbin.org/headers
这个地址会返回请求头,例如对于上面的代码,该地址会显示如下内容,其中绿色的为我们通过代码增加或修改过的:
{
"headers": {
"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
"Accept-Encoding": "gzip, deflate, br, zstd",
"Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"Authorization": "hulibaba",
"Host": "httpbin.org",
"Priority": "u=0, i",
"Sec-Ch-Ua": "\"Microsoft Edge WebView2\";v=\"143\", \"Microsoft Edge\";v=\"143\", \"Chromium\";v=\"143\", \"Not A(Brand\";v=\"24\"",
"Sec-Ch-Ua-Mobile": "?0",
"Sec-Ch-Ua-Platform": "\"Windows\"",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "none",
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0 foxtable/2026",
"X-Amzn-Trace-Id": "Root=1-69548df5-56fa34b91da97895342e055d",
"X-User-Name": "jack",
"X-User-Password": "123456"
}
}
重定向网页
可以在WebResourceRequested修改响应头,实现重定向功能,例如下面的代码会将对example.com的访问全部重定向到百度:
Dim
wv
As
WebViewer = e.Sender.WebViewer
Dim
url
As
String
= e.Request.Uri.ToLower()
If
url.Contains("example.com")
Then
e.Response = wv.CoreWebView2.Environment.CreateWebResourceResponse(
content:=Nothing,
statusCode:=302,
reasonPhrase:="Found",
headers:="Location:
https://www.baidu.com")
End
If
上述代码的参数说明:
| 参数 | 值 | 说明 |
|---|---|---|
content |
Nothing |
无响应流(重定向不需要响应内容) |
statusCode |
302 |
302临时重定向(301永久重定向) |
reasonPhrase |
"Found" |
状态描述 |
headers |
"Location: https://www.baidu.com" |
重定向目标地址 |
如果要重定向到本地文件
假定你想将某个js文件重定向到本地,在WebResourceRequested加上了如下的代码:
Dim
wv
As
WebViewer = e.Sender.WebViewer
Dim
url
As
String
= e.Request.Uri.ToLower()
If
url.EndsWith("/static/js/app.js")
Then
Dim
localUrl
As
String
=
"file:///c:/myjslib/static/js/new_app.js"
'重定向到本地的app.js文件
e.Response = wv.CoreWebView2.Environment.CreateWebResourceResponse(
content:=Nothing,
statusCode:=302,
reasonPhrase:="Found",
headers:="Location:
"
& localUrl)
End
If
实际上这段代码会失败(除非是本地网页),因为出于安全考虑,系统禁止网页访问本地文件,需要通过后面介绍的拦截响应来实现。