HarmonyOS鸿蒙Next中Web组件是否支持修改在线h5网页的请求头?

HarmonyOS鸿蒙Next中Web组件是否支持修改在线h5网页的请求头? 因为项目中所有h5都是一个通用的页面管理的,目前值看到了loadUrl 可以设置请求头,但是loadUrl好像不适用,请问Web组件是否支持修改在线h5网页的请求头?

3 回复

这边可以尝试在onLoadIntercept里拦截下请求,并通过Set判断请求是否已经拦截过,从而修改在线h5网页的请求头。

参考如下代码:

import web_webview from '@ohos.web.webview'

@Entry
@Component
struct WebHead {
  controller: web_webview.WebviewController = new web_webview.WebviewController();
  private hasCustomHeader: Set<string> = new Set()

  build() {
    Column() {
      Web({ src: $rawfile('local.html'), controller: this.controller })
        .onLoadIntercept((event) => {
          console.info("wytest--", 'onLoadIntercept url:' + event.data.getRequestUrl());
          const url = event.data.getRequestUrl();
          if (!url.startsWith("https")) return false;
          if (this.hasCustomHeader.has(url)) {
            this.hasCustomHeader.delete(url)
            return false
          }
          this.controller.loadUrl(url, [{
            headerKey: 'test',
            headerValue: '123456'
          }])
          this.hasCustomHeader.add((url))
          return true
        })
        .onInterceptRequest((event) => {
          if (event) {
            console.info("wytest--", 'onInterceptRequest url:' + event.request.getRequestUrl());
            console.log("wytest--", '请求头信息:' + JSON.stringify(event.request.getRequestHeader()))
          }
          return null
        })
        .width('100%')
        .height('50%')
    }
  }
}

local.html:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
<div id="root">
  这是第一个页面
  [点击这里跳转到目标HTML文件](https://www.example.com/test.html)
</div>
</body>
</html>

更多关于HarmonyOS鸿蒙Next中Web组件是否支持修改在线h5网页的请求头?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,Web组件支持通过WebViewsetWebViewClient方法拦截和修改在线H5网页的请求头。开发者可以通过重写shouldInterceptRequest方法,在请求发出前对请求头进行自定义修改。具体实现中,可以通过WebResourceRequest获取原始请求头,并使用WebResourceResponse返回修改后的请求头。此功能适用于需要对网络请求进行细粒度控制的场景,如添加认证信息或修改缓存策略。

在HarmonyOS鸿蒙Next中,Web组件目前并不直接支持修改在线H5网页的请求头。Web组件主要用于加载和显示网页内容,其核心功能集中在渲染和交互上。如果你需要修改请求头,通常需要在网络请求发起前处理,例如通过自定义网络拦截器或在应用层对请求进行预处理。对于更复杂的需求,建议结合其他技术栈或框架来实现。

回到顶部