当前位置: 首页 > news >正文

鸿蒙三方库httpclient使用

简介

httpclient已支持的特性参考httpclient官方文档简介。

安装配置

安装

通过如下两种方式设置三方包依赖信息(OpenHarmony ohpm环境配置等更多内容,请参考如何安装 OpenHarmony ohpm包):

  • 方式一:在Terminal窗口中,执行如下命令安装三方包,DevEco Studio会自动在工程的oh-package.json5中自动添加三方包依赖。
ohpm install @ohos/lottie
  • 方式二:在工程的oh-package.json5中设置三方包依赖,配置示例如下:
"dependencies": { "@ohos/lottie": "^2.0.0"}

依赖设置完成后,需要执行ohpm install命令安装依赖包,依赖包会存储在工程的oh_modules目录下。

ohpm install

添加权限

 在module.json5中添加网络请求权限。

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

导入模块

在需要使用的 .ets 文件中导入模块

import { HttpClient, Request, Response, TimeUnit } from '@ohos/httpclient';

使用流程

1.创建 HttpClient 实例并配置

建议使用构建器模式来创建 HttpClient 实例,并设置全局配置(如超时时间)。

// 创建 HttpClient 实例,可设置连接和读取超时时间[citation:6]
private client: HttpClient = new HttpClient.Builder().setConnectTimeout(10, TimeUnit.SECONDS) // 设置连接超时时间[citation:6].setReadTimeout(10, TimeUnit.SECONDS) // 设置读取超时时间[citation:6].build();

连接超时时间和读取超时时间

在网络请求中,连接超时时间读取超时时间是两个关键但不同的概念,它们分别控制着请求过程中不同阶段的等待时间。

核心区别对比
超时类型控制阶段类比场景典型值设置
连接超时从发起请求到建立连接的阶段拨号等待对方接电话的时间5-15秒
读取超时连接建立后数据传输的阶段电话接通后等待对方说话的时间10-30秒
连接超时 (Connection Timeout)

作用阶段:从发起网络请求到与服务器成功建立TCP连接的整个过程。

包含的具体步骤

  • DNS域名解析

  • TCP三次握手

  • SSL/TLS握手(HTTPS请求)

  • 等待服务器接受连接

读取超时 (Read Timeout)

作用阶段:连接建立成功后,等待服务器返回数据的整个过程。

包含的具体步骤

  • 等待服务器处理请求

  • 服务器生成响应数据

  • 数据从服务器传输到客户端

合理配置建议
业务场景连接超时读取超时理由
实时聊天5秒10秒需要快速响应,用户体验敏感
文件下载10秒60+秒连接要稳定,传输可以慢
API接口调用10秒30秒平衡稳定性和响应速度
图片加载8秒20秒中等负载,需要较快响应

2.构建请求对象 (Request)

使用 Request.Builder() 来构建你的请求,设置 URL、请求方法、请求头等信息。

// 构建一个 GET 请求
let request = new Request.Builder().get("https://api.example.com/data") // 指定请求方法和URL.addHeader("Content-Type", "application/json") // 添加请求头.params("key1", "value1") // 添加URL参数(针对GET请求).params("key2", "value2").build();// 构建一个 POST 请求
let requestBody = httpclient.RequestBody.create(JSON.stringify({"data1": "value1","data2": "value2"
}));
let postRequest = new Request.Builder().url("https://api.example.com/submit").post(requestBody) // 设置请求方法为POST并传入请求体.addHeader("Content-Type", "application/json").build();

3.发起请求与处理响应

HttpClient 提供了 enqueue (异步) 和 execute (同步) 方法来发起请求。

  • 异步请求 (enqueue) :推荐在 UI 线程中使用,避免阻塞界面。

    this.client.newCall(request).enqueue((result: Response) => {// 成功回调if (result && result.result) {console.info("请求成功,返回数据: " + result.result);// 注意:result.result 通常是字符串,如果是JSON需要手动解析// let jsonObj = JSON.parse(result.result);}
    }, (error: BusinessError) => {// 失败回调console.error("请求失败: " + JSON.stringify(error));
    });
  • 同步请求 (execute) :需要注意,同步请求会阻塞当前线程,在 UI 线程中使用可能导致应用无响应(ANR),因此通常建议在非 UI 线程(例如使用 TaskPool 或 Worker )中执行。

    try {const response = await this.client.newCall(request).execute();console.info("同步请求结果: " + response.result);
    } catch (error) {console.error("同步请求错误: " + error);
    }

进阶用法

待整理

拦截器 (Interceptors) 

文件上传与下载

表单提交

Cookie 管理

核心注意事项

  1. 线程选择

    • 严禁在主线程(UI 线程)中执行同步的 execute() 方法,这会导致界面卡顿甚至无响应。

    • 异步请求 enqueue() 是 UI 线程中的首选方式。

    • 如果必须在后台执行同步请求或耗时网络操作,请使用 TaskPool 或 Worker

  2. 数据解析

    • 请求返回的 result 字段通常是字符串类型。如果服务器返回的是 JSON 格式的数据,你需要手动使用 JSON.parse() 进行解析。

  3. 资源释放

    • 虽然 @ohos/httpclient 本身管理了连接资源,但确保请求完成后,特别是使用同步请求时,没有不必要的对象引用,以利于垃圾回收。

http://www.dtcms.com/a/582056.html

相关文章:

  • 网站开发的发展历史及趋势做网络平台的网站
  • 私有云盘远程用!FileRise+cpolar 让异地存取文件超简单
  • 借助Dify工作流构建AI测试智能体,效率提升可达500%
  • php网站建设与管理游客可进的直播
  • 5种有效增加网站流量沈阳企业网站制作公司
  • mak/Makefile和进度条
  • ip数据报传输过程梳理
  • 2.1 NLP 核心概念回顾:从词袋到 Transformer
  • 做网站的公司 经营范围2017年到2018年建设的网站
  • 东莞网站建设 光龙wordpress 目录 模板下载
  • 时序数据库系列(六):物联网监控系统实战
  • 迁移学习基础知识——迁移学习的问题形式化
  • java基础-ArrayList集合
  • 做网站运营优质做网站价格
  • 【双机位A卷】华为OD笔试之【哈希表】双机位A-采购订单【Py/Java/C++/C/JS/Go六种语言】【欧弟算法】全网注释最详细分类最全的华子OD真题题解
  • 第十章、GPT1:Improving Language Understanding by Generative Pre-Training(代码部分)
  • 2025全球生成式人工智能AIGC产业全景与行业应用研究报告|附900+份报告PDF、数据、可视化模板汇总下载
  • 网站广告销售怎们做网站开发确认书
  • 常见的模型性能评估图表案例解读
  • 网站推广服务网站连锁金融网站怎么做
  • 从协议中成长
  • ⚡️2025-11-07GitHub日榜Top5|AI舆情分析系统
  • 云建站淘宝客网页设计教程 表单
  • 石河子农八师建设兵团社保网站餐饮营销方案
  • P1012 [NOIP 1998 提高组] 拼数
  • 第四阶段C#通讯开发-9:网络协议Modbus下的TCP与UDP
  • 《计算机操作系统》_并发 bug 和应对 (死锁/数据竞争/原子性违反;防御性编程和动态分析)20251106
  • 【算法】递归的艺术:从本质思想到递归树,深入剖析算法的性能权衡
  • 网上怎么做网站赚钱seo初级入门教程
  • MySQL GROUP BY 和 GROUP_CONCAT 使用方法总结,group by后将其他的字段整合到一个字段中 并通过逗号链接或指定其他链接符号