积分431 / 贡献0

提问31答案被采纳5文章47

[经验分享] httpclient开启高效网络请求之旅 原创

润开鸿_坚果 显示全部楼层 发表于 2024-5-6 18:52:29

大家好,今天我们用httpclient实现一个网络请求,之前我们用的最多的就是原生,或者是axios,今天我们一起来看一下第三种实现方式。

作者:搬砖的小宇

httpclient简介

HTTP是现代应用程序通过网络交换数据和媒体的的主要方式。httpclient是OpenHarmony 里一个高效执行的HTTP客户端,使用它可使您的内容加载更快,并节省您的流量。httpclient以人们耳熟能详的OKHTTP为基础,整合android-async-http,AutobahnAndroid,OkGo等库的功能特性,致力于在OpenHarmony 打造一款高效易用,功能全面的网络请求库。当前版本的httpclient依托系统提供的网络请求能力和上传下载能力,在此基础上进行拓展开发。

功能

1.支持全局配置调试开关,超时时间,公共请求头和请求参数等,支持链式调用。

2.自定义任务调度器维护任务队列处理同步/异步请求。

3.支持tag取消请求。

4.支持设置自定义拦截器。

5.支持重定向。

6.支持客户端解压缩。

7.支持文件上传下载。

8.支持cookie管理。

9.支持对请求内容加解密。

10.支持自定义请求。

11.支持身份认证。

12.支持证书校验。

13.支持响应缓存。

14.支持请求配置responseData属性。

15.支持设置请求优先级。

16.支持证书锁定。

下载安装

ohpm install @ohos/httpclient

使用之前记得添加网络权限

"requestPermissions": [
      {
        "name": "ohos.permission.INTERNET"
      },
      {
        "name": "ohos.permission.GET_NETWORK_INFO"
      }
    ]

GET请求示例

import { HttpClient, Request, Logger, HttpCall, Response, TimeUnit } from '@ohos/httpclient';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct SecondPage {
  @State message: string = 'Hello World';
  @State status: string = "";
  @State content: string = "";
  echoServer: string = "你的网络请求";
  client: HttpClient = new HttpClient
    .Builder()
    .setConnectTimeout(10, TimeUnit.SECONDS)
    .setReadTimeout(10, TimeUnit.SECONDS)
    .build();

  aboutToAppear(): void {

    this.getdate()
  }

  getdate() {

    // 配置请求参数
    let request = new Request.Builder()
      .get(this.echoServer)
      .addHeader("Content-Type", "application/json")
      .params("testKey1", "testValue1")
      .params("testKey2", "testValue2")
      .build();
    // 发起请求
    this.client.newCall(request).enqueue((result: Response) => {
      if (result) {
        this.status = result.responseCode.toString();
      }
      if (result.result) {
        this.content = result.result;
      } else {
        this.content = JSON.stringify(result);
      }
      Logger.info("onComplete -> Status : " + this.status);
      Logger.info("onComplete -> Content : " + JSON.stringify(this.content));
    }, (error: BusinessError) => {
      this.status = error.code.toString();
      this.content = JSON.stringify(error.data);
      Logger.info("onError -> Error : " + this.content);
    });


  }

  build() {
    Row() {
      Column() {
        Text(this.content)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

效果

image-20240506183502618

可以看到数据是拿到了,接下来,如何处理数据,就看各位的了。

参考

https://gitee.com/openharmony-tpc/httpclient

关于坚果派

坚果派由坚果等人创建,团队拥有12个华为HDE,以及若干其他领域的三十余位万粉博主运营。专注于分享的技术包括HarmonyOS/OpenHarmony,ArkUI-X,元服务,服务卡片,华为自研语言,AI、BlueOS操作系统、团队成员聚集在北京,上海,南京,深圳,广州,宁夏等地。

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部