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

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

HarmonyOS
1天前
浏览
收藏 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
微信
回复
1天前
相关问题
HarmonyOS RN项目下http请求头header问题
32浏览 • 1回复 待解决
如何修改应用icon图标
2171浏览 • 1回复 待解决
HarmonyOS 应用推送图标如何修改
28浏览 • 1回复 待解决
COMMON_EVENT_USER_FOREGROUND
1751浏览 • 1回复 待解决
如何设置request.agent.Config中saveas参数
603浏览 • 1回复 待解决
三方应用如何获取http代理信息
1821浏览 • 1回复 待解决
HarmonyOS如何接入RN页面?
188浏览 • 0回复 待解决
应用http请求响应2300023
2188浏览 • 1回复 待解决
RN工程,Metro跑bundle无法识别应用
218浏览 • 1回复 待解决
HarmonyOS reqeust.agent.Task-Config-mode参数
26浏览 • 1回复 待解决
HarmonyOS 菜单样式如何修改
48浏览 • 1回复 待解决
HarmonyOS RN如何与Native交互?
225浏览 • 1回复 待解决