修改请求头

在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

实际上这段代码会失败(除非是本地网页),因为出于安全考虑,系统禁止网页访问本地文件,需要通过后面介绍的拦截响应来实现。


本页地址:http://www.foxtable.com/webhelp/topics/6216.htm