HarmonyOS RN应用如何修改http的User-Agent

RN应用如何修改http的User-Agent,@rnoh/react-native-openharmony并没有export出HttpClient,所以RN APP如何替换掉httpClient。

HarmonyOS
2024-12-25 08:36:15
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

需要手动创建一个自定义的HttpClient.Builder实例。通过继承HttpClient.Builder并实现其中的配置方法来实现自定义,重写HttpClient.Builder中的关键方法,如addInterceptor、addNetworkInterceptor、cache等,以满足特定需求,例如可以重写addInterceptor方法。然后使用自定义的HttpClient.Builder实例调用build方法,构建自定义的HttpClient实例。

可以考虑使用axios通过设置请求头来定制User-Agent。参考链接:https://gitee.com/react-native-oh-library/usage-docs/blob/master/zh-cn/axios.md

经确认@rnoh/react-native-openharmony中没有HttpClient,此外如使用ArkTS http发送请求,会带一个默认的UA"libcurl-agent/1.0",自定义ua可以参考以下demo:

import router from '@ohos.router';
const PHONE_USER_AGENT: string = 'xxxx'
@Entry
@Component
struct UA {
  controller: WebController = new WebController();
  build() {
    Column() {
      Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
        Image($r("app.media.Back"))
          .width(24)
          .height(24)
          .focusable(false)
      }
      .width(48)
      .height(56)
      .onClick(() => {
        router.back()
      })
      Web({
        src: 'https://www.huawei.com/cn/',
        controller: this.controller
      })
        .webDebuggingAccess(true)
        .userAgent(PHONE_USER_AGENT)
        .width('100%')
        .height('100%')
    }
    .height('100%')
    .width('100%')
  }
}

在默认的UserAgent基础上修改:

// xxx.ets
@Entry
@Component
struct WebComponent {
  @State message: string = 'Hello World'
  controller: WebController = new WebController();
  myUserAgent: string
  build() {
    Column() {
      Web({
        src: 'https://www.huawei.com/cn/',
        controller: this.controller
      })
        .userAgent(this.myUserAgent)
        .webDebuggingAccess(true)
        .onUrlLoadIntercept((event) => {
          this.myUserAgent = this.controller.getDefaultUserAgent() +  'MATE40 PRO';
          return true
        })
    }
  }

注意点:保证后台服务首次收到Http请求时的Header里的UserAgent是修改之后的值。

所以修改的时机必须是:在Web组件和WebController绑定后,首次发起Http请求之前。

目前测试的结果是在onUrlLoadIntercept回调里面设置的userAgent。

rnoh里可以针对某个rnInstance添加请求头数据,写法是:

rnInstance.httpClient.addRequestInterceptor({
  shouldIntercept: (url: string, requestOptions: RequestOptions) => true,
  intercept: (url: string, requestOptions: RequestOptions) => {
    requestOptions.header = new Object();
    requestOptions.header['user-agent'] = ''
    return {
      url,
      requestOptions
    };
  }
})
分享
微博
QQ
微信
回复
2024-12-25 12:02:16
相关问题
HarmonyOS 如何写一个工具获取User-Agent
294浏览 • 1回复 待解决
HarmonyOS user_agent如何获取
386浏览 • 1回复 待解决
HarmonyOS RN项目下http请求头header问题
356浏览 • 1回复 待解决
如何修改应用icon图标
2443浏览 • 1回复 待解决
HarmonyOS 应用推送图标如何修改
502浏览 • 1回复 待解决
COMMON_EVENT_USER_FOREGROUND
1855浏览 • 1回复 待解决
三方应用如何获取http代理信息
2099浏览 • 1回复 待解决
如何设置request.agent.Config中saveas参数
678浏览 • 1回复 待解决
应用http请求响应2300023
2570浏览 • 1回复 待解决
HarmonyOS如何接入RN页面?
355浏览 • 0回复 待解决
HarmonyOS 如何修改app名字?
731浏览 • 1回复 待解决
HarmonyOS 菜单样式如何修改
182浏览 • 1回复 待解决
HarmonyOS USER版本怎么将文件拷进手机
242浏览 • 1回复 待解决
HarmonyOS reqeust.agent.Task-Config-mode参数
118浏览 • 1回复 待解决