实用指南:在鸿蒙NEXT中发起HTTP网络请求:从入门到精通

news/2025/10/17 12:22:25/文章来源:https://www.cnblogs.com/slgkaifa/p/19147522

实用指南:在鸿蒙NEXT中发起HTTP网络请求:从入门到精通

随着鸿蒙NEXT(HarmonyOS NEXT)的正式发布,其全新的开发体系和强大的能力吸引了众多开发者的目光。应用开发中,网络请求几乎是不可或缺的一环。本文将带你全面了解如何在鸿蒙NEXT中使用其官方的@kit.NetworkKit网络库,安全、高效地发起HTTP请求。

一、环境准备与权限配置

在开始编写代码之前,我们需要完成两步准备工作。

1. 导入NetworkKit

在项目的entry模块下的oh-package.json5文件中,添加@kit.NetworkKit依赖。

json5

复制

下载

// entry/oh-package.json5
"dependencies": {"@kit.NetworkKit": "^1.0.0"
}

完成后,在终端中执行 ohpm install 命令来安装依赖。

2. 配置网络访问权限

module.json5配置文件中,申请必要的网络权限。

json5

复制

下载

// entry/module.json5
"module": {"requestPermissions": [{"name": "ohos.permission.INTERNET"}]
}

注意:如果你的应用需要访问非HTTPS的明文HTTP链接,在API 10及更高版本中,还需要在应用根目录的 AppScope 下的 app.json5 中声明 network 安全配置。

json5

复制

下载

// AppScope/app.json5
"app": {"bundleName": "com.yourcompany.yourapp","network": {"cleartextTraffic": true // 允许HTTP明文流量}// ... 其他配置
}

二、发起一个简单的GET请求

让我们从一个最基础的例子开始:获取一个公开的API数据。

typescript

复制

下载

// 导入NetworkKit
import { http } from '@kit.NetworkKit';
import { BusinessError } from '@kit.BasicServicesKit';// 定义一个数据模型(根据API返回结构定义)
interface Post {userId: number;id: number;title: string;body: string;
}async function fetchPostData(): Promise {// 1. 创建请求对象let httpRequest = http.createHttp();// 2. 定义请求的URLlet url = 'https://jsonplaceholder.typicode.com/posts/1';try {// 3. 发起GET请求let response = await httpRequest.request(url,{method: http.RequestMethod.GET, // 指定请求方法header: { // 设置请求头(可选)'Content-Type': 'application/json'}});// 4. 检查请求是否成功 (状态码 200-299)if (response.responseCode === http.ResponseCode.OK) {// 5. 解析返回的JSON数据let result = response.result.toString();let post: Post = JSON.parse(result) as Post;console.info(`Fetch Success! Title: ${post.title}`);// 在这里更新你的UI,例如:this.postTitle = post.title;} else {console.error(`HTTP Error! Code: ${response.responseCode}, Message: ${response.result.toString()}`);}} catch (error) {// 6. 捕获并处理异常(网络错误、解析错误等)let err: BusinessError = error as BusinessError;console.error(`Request Failed! Code: ${err.code}, Message: ${err.message}`);} finally {// 7. 释放请求对象,防止内存泄漏httpRequest.destroy();}
}// 在某个按钮点击事件或页面生命周期中调用
// fetchPostData();

代码解析:

  1. 创建对象:使用 http.createHttp() 创建一个HTTP请求实例。

  2. 配置请求:在 request 方法的第二个参数中,指定方法为 GET,并可以设置请求头。

  3. 异步处理:使用 async/await 语法处理异步请求,让代码更清晰。

  4. 结果检查:通过 response.responseCode 判断请求是否成功。

  5. 数据解析:将返回的字符串结果解析成我们定义的 Post 接口对象。

  6. 异常处理:使用 try-catch 捕获网络请求过程中可能出现的所有错误。

  7. 资源释放:最后在 finally 块中销毁请求对象,这是一个好习惯。

三、发起一个POST请求

向服务器提交数据同样简单。

typescript

复制

下载

async function submitUserData(user: { name: string; email: string }): Promise {let httpRequest = http.createHttp();let url = 'https://api.example.com/users';try {// 将JavaScript对象序列化为JSON字符串let data = JSON.stringify(user);let response = await httpRequest.request(url,{method: http.RequestMethod.POST,header: {'Content-Type': 'application/json', // 告诉服务器我们发送的是JSON},extraData: data // 请求体数据});if (response.responseCode === http.ResponseCode.OK || response.responseCode === http.ResponseCode.CREATED) {console.info('User created successfully!');let responseData = response.result.toString();console.info(`Server Response: ${responseData}`);} else {console.error(`Submission Failed! Code: ${response.responseCode}`);}} catch (error) {let err: BusinessError = error as BusinessError;console.error(`Request Failed! Code: ${err.code}, Message: ${err.message}`);} finally {httpRequest.destroy();}
}// 使用示例
// submitUserData({ name: '张三', email: 'zhangsan@example.com' });

关键点:

  • 方法:将 method 改为 http.RequestMethod.POST

  • 请求体:需要提交的数据通过 extraData 属性传递。

  • 请求头:设置 'Content-Type': 'application/json' 至关重要,它确保了服务器能正确解析你发送的数据。

四、高级配置与最佳实践

1. 设置超时

为了避免请求无限期挂起,总是设置一个合理的超时时间。

typescript

复制

下载

let response = await httpRequest.request(url,{method: http.RequestMethod.GET,connectTimeout: 10000, // 连接超时 10秒readTimeout: 10000,    // 读取超时 10秒}
);
2. 使用HTTP代理

如果你的网络环境需要,可以配置代理。

typescript

复制

下载

let httpRequest = http.createHttp();
// 先销毁默认配置
httpRequest.destroy();
// 使用代理配置重新创建
let proxyInfo: http.HttpProxy = {host: '192.168.1.100',port: 8080,exclusionList: [] // 排除列表,这些地址不走代理
};
httpRequest = http.createHttp({ proxy: proxyInfo });
3. 安全建议
  • 生产环境禁用明文HTTP:除非万不得已,否则不要设置 cleartextTraffic: true。始终使用HTTPS来保护用户数据。

  • 证书校验:鸿蒙默认会进行证书校验,确保通信安全。请不要轻易禁用证书校验功能。

  • 敏感信息:不要在URL或日志中暴露API Key、Token等敏感信息。

五、总结

鸿蒙NEXT的@kit.NetworkKit提供了一个现代化、易于使用的HTTP客户端。其核心步骤可以概括为:

  1. 创建http.createHttp()

  2. 配置:在 options 中设置方法、头、超时等。

  3. 发送:使用 request() 方法。

  4. 处理:检查状态码,解析结果。

  5. 清理:在 finally 中调用 destroy()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10.16 CSP-S 模拟赛总结

ContestT1 我很神秘。数据水理论复杂度 \(O(nk^2)\) 暴力过了。 实际上只要想到对 \(k\) 取模就会做了。因为满足要求的情况即为存在一段 \([l,r]\) 的子区间和对 \(k\) 取模为 \(0\),那么等价于两次前缀和对 \(k\) 取…

远程无钥匙进入(PKE)技术:便利与安全的完美融合

PKE 远程无钥匙进入 在智能汽车时代,远程无钥匙进入(Passive Keyless Entry,简称PKE)已成为提升用户体验的核心技术。它允许车主无需手动操作钥匙,只需携带智能钥匙靠近车辆,即可自动解锁车门或启动引擎。根据20…

灵动岛iPhone状态栏获得高度不对 iOS iPhone14pro iPhone14pro max状态栏获得高度不对

之前的获得状态栏高度代码是(CGFloat)statusRectHeight { if (@available(iOS 13.0, *)) { _statusRectHeight = [UIApplication sharedApplication].windows.firstObject.windowScene.statusBarManager.statusBarFram…

string略解

string 字符串类型,下标从0开始。 函数用法 定义 #include <iostream> #include <string>string s;初始化 string s="Hello,World!";sting a="Hello,"; string b="World!"…

《程序员修炼之道》 阅读笔记二

核心概念解读 “软件的熵”也被称为“破窗效应”。一个软件项目,如果出现了第一个糟糕的设计、第一个临时的脏代码、第一个没有修复的bug,而没有人去处理,它就会迅速腐烂。这就像一栋建筑有一扇破窗不被修理,很快就…

是时候告别向日葵、Todesk、TeamViewer了,快速搭建自托管服务器RustDesk

是时候告别向日葵、Todesk、TeamViewer了,快速搭建自托管服务器RustDesk最早我一直在用向日葵,但后来被限速,体验越来越差。远程操作,没必要花钱,于是开始找免费的替代方案。 后来试了ToDesk,刚开始感觉还行,但…

史馆

发言人 内容至“某些人”的一封信 https://www.luogu.com.cn/article/qdk2rgrt行啊,我没开完隐,你谴责我注册时间早,你来看看我注册之后都在干什么你拒绝是你的事,学校怎样做是学校的事,如果你来问我文化课我会拒…

firecrawl 私有部署(test)

firecrawl 私有部署(test) github: https://github.com/firecrawl/firecrawl 文档: https://docs.firecrawl.dev/introduction安装:git clone https://github.com/firecrawl/firecrawl.gitcd firecrawldocker co…

$\text{Catalan}$ 数 卡特兰数

定义公式 \(1\):\(C_n=\begin{pmatrix}2n\\n\end{pmatrix}-\begin{pmatrix}2n\\n-1\end{pmatrix}\)公式 \(2\):\(C_n=\sum_{a+b=n-1}C_aC_b\)公式 \(3\):\(C_n=\frac{4n-2}{n+1}C_{n-1},C_0=1\)其中公式 \(3\) 表明…

大模型 | VLM 初识及在自动驾驶场景中的应用

在了解 VLM 之前,先复习下 LLM。 一、LLM(Large Language Model) 大语言模型(LLM,Large Language Model)名字虽然带有语言二字,但其实并不局限于语言类场景。LLM 更多是一种统计建模的通用技术,它们主要通过自回…

CF1977 Codeforces Round 948 (Div. 2) 游记(VP)

仅做出两题,结果凭借手速拿到表现分 $1740$。省流 仅做出两题,结果凭借手速拿到表现分 \(1740\)。10.17 内含剧透,请vp后再来。 不是题解!!!!!!! 赛前 早上花了很多时间试图把 \(stars569\) 搞的数据库装好,…

别被波形“骗” 了!差分探头与无源探头测量不一致的 5 大关键因素

在电子测量领域,精确地获取电路中电信号的波形对于分析电路的工作状态、验证设计思路以及排查故障至关重要。示波器是波形测量中最常用的仪器,通常会搭配不同类型的探头使用。其中,差分探头和无源探头是比较常见的两…

2025 年展览会服务商最新推荐榜权威发布:22 年经验甄选十强品牌,助力企业参展高效决策

当前会展行业已迈入 “全链路价值创造” 新阶段,企业参展需求从单一搭建升级为 “策划 - 执行 - 转化” 全流程服务,但市场服务商资质参差不齐:传统机构多困于 “设计 + 施工” 模式,新兴品牌虽具创新力却缺乏辨识…

OpenHarmony SELinux全面技术指南:从原理到实践的系统安全防护(全网最全) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2025年信息流代运营服务商权威推荐榜单:专业投放策略与效果优化服务口碑之选

2025年信息流代运营服务商权威推荐榜单:专业投放策略与效果优化服务口碑之选在数字营销快速演进的今天,信息流广告已成为企业获取目标用户的重要渠道。随着各大媒体平台算法不断升级,用户行为日趋复杂,信息流投放的…

2025 年焊把线厂家最新推荐榜:国标欧标铜芯软焊把线优质企业排行,优质品牌助力选购欧标/铜芯/软/耐高温焊把线厂家推荐

在工业制造、建筑施工等核心领域,焊把线作为焊接作业的关键连接载体,其质量直接决定作业安全、焊接精度与生产效率。当前市场上,焊把线品牌数量激增,但产品质量差距悬殊,部分产品存在导电效率低、耐候性差、易老化…

【Prompt学习技能树地图】单一思维链优化-自我一致性提示工程原理、实践与代码实现 - 教程

【Prompt学习技能树地图】单一思维链优化-自我一致性提示工程原理、实践与代码实现 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importa…

基于MATLAB的倒立摆控制实现方案

基于MATLAB的倒立摆控制实现方案,包含PID控制与神经网络(DQN)控制的双重实现一、系统建模与基础参数 %% 倒立摆动力学参数 m = 0.1; % 摆杆质量 (kg) M = 1.0; % 小车质量 (kg) l = 0.5; % 摆杆长度 (m) g…

2025 年展会服务商最新推荐排行榜:聚焦一站式服务与高效执行能力的优质企业榜单瓷砖/暖通/照明/门窗/玻璃/厨卫/卫浴/灯饰展会厂家推荐

在全球化商务交流不断深化的当下,展会已成为建材、石材、瓷砖、暖通等建筑装饰领域企业展示品牌、拓展市场、达成合作的核心平台。然而,当前展会服务市场中,部分服务商存在经验匮乏、资源薄弱、服务模式滞后等问题,…

数据迁移mysql--sr

mysql-docker安装docker run -itd \-p 3306:3306 \-v /home/mysql/conf:/etc/mysql/conf.d \-v /home/mysql/data:/var/lib/mysql \-v /home/mysql/log:/var/log/mysql \-e MYSQL_ROOT_PASSWORD=root \-e TZ=Asia/Shan…