鸿蒙 韶非 UI 系列:HTTP 数据请求 @ohos.net.http,告别前端 fetch,鸿蒙网络栈入门第一篇
鸿蒙 韶非 UI 系列HTTP 数据请求 ohos.net.http告别前端 fetch鸿蒙网络栈入门第一篇写在前面如果你写过 ArkUI 之外的任何鸿蒙应用能力大概率第一个想做的就是「调接口」后端给你一个 RESTful 接口https://api.example.com/users前端 React 用fetch(url)一行搞定。鸿蒙 ArkTS 里你写fetch——编译报错「找不到 fetch」。你查文档发现鸿蒙不是浏览器运行环境没有fetch/XHR/axios要调接口得用专门的网络栈ohos.net.http。你点进去发现http.createHttp()HttpRequest.request()HttpRequestOptions一堆配置项 HttpResponse字段一堆 异步两种姿势 错误码和状态码要分清——比fetch复杂十倍一脸懵。这是「前端思维」和「鸿蒙原生网络栈」的分水岭。鸿蒙给的网络栈答案是ohos.net.http——createHttp()创建请求器、request()发 GET/POST、HttpRequestOptions配头/超时/协议/数据类型、HttpResponse拿响应码头体。本文就用一个真机可跑的「调 httpbin.org 公开测试接口」demo把ohos.net.http从「听名字一脸懵」讲到「下个项目直接抄」。代码托管在 AtomGit文末有链接真机实拍截图作证。这是非 UI 系列第一篇ArkUI 十篇凑齐后转网络栈入门。适合人群写过 ArkUI、第一次调鸿蒙网络接口的同学。不适合人群还在学State的同学——出门左转看我的入门篇。一、先讲清楚ohos.net.http到底是啥一句话ohos.net.http是鸿蒙原生 HTTP 网络栈管「发请求、收响应、控超时、销毁」全流程。你之前写前端用fetch/axios是浏览器宿主 API——鸿蒙不是浏览器环境没有这些。ohos.net.http是鸿蒙专门给应用调网络接口的原生模块能力对标fetch但更精细可控。核心 API 一览API作用一句话理解http.createHttp()创建请求器「造一个 HttpRequest 实例,后面用它发请求」httpReq.request(url, options)发请求「GET/POST/PUT/DELETE 都通过它」HttpRequestOptions配置项「method/header/超时/协议/数据类型」HttpResponse响应「responseCode header result」httpReq.destroy()销毁请求器「不用了销毁,防内存漏」记住这五个往下看。二、动手一个调 httpbin.org 的 GET/POST demo2.1 import 创建请求器importhttpfromohos.net.httpEntryComponentstruct Index{privatehttpReq:http.HttpRequesthttp.createHttp()StatestatusText:string尚未请求StaterespBody:stringStateisLoading:booleanfalse// ...}三个细节import http from ohos.net.http——http是 namespace,所有 API 都挂在它下面http.createHttp()/http.RequestMethod.GET/http.HttpDataType.STRING等http.HttpRequest是 interface不是 class,实例由http.createHttp()造,不能new http.HttpRequest()请求器是有状态资源,不用了要destroy()——比fetch多一步销毁管理2.2 GET 请求Promise 异步姿势asyncdoGet():Promisevoid{this.isLoadingtruethis.statusTextGET 请求中...try{constresp:http.HttpResponseawaitthis.httpReq.request(https://httpbin.org/get,{method:http.RequestMethod.GET,header:{X-Custom-Header:鸿蒙ArkTS-HTTP},connectTimeout:8000,readTimeout:8000,usingProtocol:http.HttpProtocol.HTTP1_1,expectDataType:http.HttpDataType.STRING,})this.statusTextGET 完成状态码${resp.responseCode}this.respBodyURL: https://httpbin.org/get\n\n${JSON.stringify(JSON.parse(resp.resultasstring),null,2)}}catch(e){this.statusTextGET 失败${e.message}this.respBody}finally{this.isLoadingfalse}}httpReq.request(url, options)返回PromiseHttpResponse,用await等响应。HttpRequestOptions常用字段字段作用默认methodRequestMethod 枚举GETheader请求头对象{}extraData请求体POST 用-connectTimeout连接超时ms60000readTimeout读取超时ms60000usingProtocolHTTP 协议HTTP1_1expectDataType期望响应数据类型STRING2.3 POST 请求传 JSON 体asyncdoPost():Promisevoid{this.isLoadingtruethis.statusTextPOST 请求中...try{constbody:Recordstring,string{user:鸿蒙开发者,action:login,ts:${Date.now()}}constresp:http.HttpResponseawaitthis.httpReq.request(https://httpbin.org/post,{method:http.RequestMethod.POST,header:{Content-Type:application/json,X-Request-From:ArkTS},extraData:JSON.stringify(body),connectTimeout:8000,readTimeout:8000,usingProtocol:http.HttpProtocol.HTTP1_1,expectDataType:http.HttpDataType.STRING,})this.statusTextPOST 完成状态码${resp.responseCode}this.respBodyPOST 体 →\n${JSON.stringify(body,null,2)}\n\n响应 →\n${JSON.stringify(JSON.parse(resp.resultasstring),null,2)}}catch(e){this.statusTextPOST 失败${e.message}this.respBody}finally{this.isLoadingfalse}}POST 比 GET 多两步header加Content-Type: application/json——告诉服务端体是 JSONextraData: JSON.stringify(body)——把对象序列化成 JSON 字符串传ArkTS 强约束body不能是裸对象字面量arkts-no-untyped-obj-literals要先声明Recordstring, string再赋值。2.4 响应处理HttpResponse三字段resp.responseCode// 服务端状态码200/404/500resp.header// 响应头对象resp.result// 响应体string/Object/ArrayBuffer,取决于 expectDataTyperesp.resultType// 实际响应类型枚举新手最容易混淆的是result它的类型由expectDataType决定STRING→ string,ARRAY_BUFFER→ 二进制,默认Object→ 已 deprecated。我设了STRING,所以resp.result as string断言成字符串用。2.5 销毁请求器生命周期收尾aboutToDisappear():void{// 销毁 HttpRequest 释放资源不收易内存漏this.httpReq.destroy()}http.createHttp()造的请求器是有状态资源——底层持有 socket、缓冲区、连接池。组件销毁时不调destroy(),这些资源不会自动释放,长时间运行易内存漏。这是fetch没有的鸿蒙专属坑。2.6 UI 反馈区build(){Column({space:14}){Text(HTTP 数据请求 Demoohos.net.http).fontSize(22).fontWeight(FontWeight.Bold).margin({top:16})// 状态区isLoading 显示加载中,完成后显示状态码Column({space:8}){Text(状态).fontSize(14).fontColor(#007DFF)Text(this.statusText).fontSize(16).fontWeight(FontWeight.Bold).fontColor(#222).padding(10).backgroundColor(#F0F0F0).borderRadius(6).width(100%)}.width(100%).padding(14).backgroundColor(#fff).borderRadius(10)// 按钮区GET / POST / 清空Row({space:10}){Button(GET 请求).backgroundColor(#007DFF).fontColor(#fff).height(40).layoutWeight(1).enabled(!this.isLoading).onClick((){this.doGet()})Button(POST 请求).backgroundColor(#FF4D4F).fontColor(#fff).height(40).layoutWeight(1).enabled(!this.isLoading).onClick((){this.doPost()})Button(清空).backgroundColor(#eee).fontColor(#333).height(40).onClick((){this.statusText尚未请求;this.respBody})}.width(100%)// 响应体显示区滚得动长 JSON 体可滚Column({space:8}){Text(响应体).fontSize(14).fontColor(#007DFF)Scroll(){Text(this.respBody||点按钮发请求后,这里显示响应体).fontSize(12).fontColor(#555).fontFamily(sans-serif).padding(10).backgroundColor(#FAFAFA).borderRadius(6)}.height(58%).width(100%).scrollBar(BarState.Auto)}.width(100%).padding(14).backgroundColor(#fff).borderRadius(10).layoutWeight(1)}.padding(16).backgroundColor(#F5F6F8).height(100%).width(100%)}三、真机实拍调 httpbin.org 真发出去并真有响应我把这个 demo 装到真机上跑鸿蒙 6.1.1.125, API 24调 httpbin.org 公开测试接口下面两张都是真机实拍没有任何 P 图。初始态状态「尚未请求」 GET/POST/清空三按钮 响应体区提示点 GET 按钮发请求后的响应态状态「GET 完成状态码 200」 响应体区显示 httpbin.org 返回的 JSON重点看第二张状态显示「GET 完成状态码 200」——真发出去并真有响应。响应体区显示 httpbin.org 返回的 JSON里面能看到我设的X-Custom-Header: 鸿蒙ArkTS-HTTP被服务端 echo 回来——这就是header字段生效的证明。POST 同理体被 echo 回来证明extraData生效。四、ohos.net.httpvs 前端fetch啥差异新手最容易纠结的问题既然前端fetch那么简洁鸿蒙为啥要造一套独立的维度前端fetchohos.net.http运行环境浏览器宿主鸿蒙原生运行环境创建全局fetch()调即用http.createHttp()造实例销毁浏览器自管必须destroy()防漏超时配置AbortController signalconnectTimeout/readTimeout字段请求头headers字段header字段单数响应类型response.text()/json()/arrayBuffer()链式expectDataType预设 resp.result直取错误姿势Promisetry/catch同Promisetry/catch一句话决策鸿蒙应用调接口必须用ohos.net.http,不能用fetch不存在。鸿蒙不是浏览器,这套原生栈更精细可控,代价是销毁管理多一步。五、常见坑都是血泪坑症状解法用fetch/axios编译报错「找不到 fetch」鸿蒙用ohos.net.http,没有浏览器宿主 APIHttpRequest用new编译报错HttpRequest是 interface,用http.createHttp()造实例HttpDataType.STRING_TYPE编译报错「Property 不存在」真常量名是STRING不带_TYPE后缀不调destroy()长跑内存漏组件销毁aboutToDisappear调httpReq.destroy()裸对象字面量传extraData编译报错arkts-no-untyped-obj-literals先声明Recordstring, X变量再JSON.stringifyresp.result类型不明运行时报错设expectDataType: STRINGas string断言忘 INTERNET 权限请求发不出去module.json5 配ohos.permission.INTERNET,装机首次授权错误码和状态码混业务判断错e.message是错误码网络层,resp.responseCode是状态码应用层六、INTERNET 权限鸿蒙应用调网的硬门槛鸿蒙应用调网络接口,必须先在module.json5声明ohos.permission.INTERNET权限,否则请求发不出去编译会 WARN 提示。{module:{abilities:[{name:EntryAbility,srcEntry:./ets/entryability/EntryAbility.ets,requestPermissions:[{name:ohos.permission.INTERNET}]}]}}装机首次跑时,鸿蒙会弹权限询问框,用户同意后才能调网。这是鸿蒙安全模型的硬门槛——比浏览器fetch多一层权限管理。七、完整代码仓库本文所有代码都已托管到AtomGit,欢迎 clone、提 issue、点 star仓库地址https://atomgit.com/JaneConan/arkui-http-request仓库包含完整的「调 httpbin.org GET/POST」demo 工程Index.ets主页面http.createHttprequest UI 反馈 销毁doGet/doPost两个异步姿势示范HttpRequestOptions常用字段配置 HttpResponse三字段处理可直接用 DevEco Studio 打开运行需真机有网 INTERNET 权限授权八、下一步该学什么跑通这个 demo 之后,你的鸿蒙网络栈就入门了。这是非 UI 系列第一篇,后续按这个顺序往下文件 IOohos.file.fs下一篇沙箱读写 元信息查,告别裸 PersistentStorage 存大对象能力调用ohos.ability调起相机/相册/定位等系统能力,应用集成系统服务后台任务ohos.backgroundTask长时后台跑、保活、调度,真机部署必学数据持久化ohos.data.relationalStore鸿蒙 SQLite 封装,结构化数据存取WebSocketohos.net.webSocket长连接、推送、实时通讯,聊天应用必学写在最后ohos.net.http的本质,是**「鸿蒙原生网络栈」**——不是浏览器宿主 API,是鸿蒙专门给应用调接口的原生模块,能力对标fetch但更精细可控。代价是销毁管理多一步、权限管理多一层。一旦你开始用鸿蒙原生思维写网络调,你会发现大部分「调接口收响应」的需求,都是createHttprequestdestroy三步的自然结果。代码量比fetch多三行,可控性高九成。代码已经给你了,仓库链接在上面。现在关掉这篇文章,打开 DevEco Studio,把 demo 跑起来,亲手点 GET 感受下真发请求真收响应。跑通了,回来评论区打个「1」,我看看有多少人真的动手了。作者JaneConan仓库https://atomgit.com/JaneConan/arkui-http-request协议Apache-2.0,随便用,别告我

相关新闻

Java调用C++实战:JNI环境配置、代码编写与问题排查指南

Java调用C++实战:JNI环境配置、代码编写与问题排查指南

1. 项目概述:为什么要在Java里调用C?在Java项目里,有时候你会遇到一些性能瓶颈,比如密集的数学计算、图像处理,或者需要直接操作硬件、复用一些历史悠久的C/C库。这时候,纯Java可能就有点力不从心了。JNI&a…

2026/7/27 21:39:26 阅读更多 →
设计EDA 技术 VP(技术副总裁)12 维度 JD(HR 内部 高管层专用)

设计EDA 技术 VP(技术副总裁)12 维度 JD(HR 内部 高管层专用)

定位:公司最高技术决策层之一,全面负责 EDA / 设计平台 / 芯片研发技术战略、组织、经营、风险与竞争力 1. 对标层级 内部职级:M4 / VP 级 / 高管层 外部对标:华为 21–22 级、互联网 M3/VP、头部芯片 / EDA 公司技术 VP / 研发 VP/CTO 梯队 定位:技术一把手、战略制定者…

2026/7/28 3:54:58 阅读更多 →
Redux核心原理与最佳实践指南

Redux核心原理与最佳实践指南

1. Redux 核心设计理念解析Redux 作为 JavaScript 应用状态管理的事实标准,其核心设计哲学源自 Flux 架构与函数式编程思想。我在多个大型前端项目中实践发现,真正理解其三大原则比单纯会写代码更重要:单一数据源原则:整个应用的状…

2026/7/27 13:43:36 阅读更多 →

最新新闻

回溯算法实战:组合总和III的解题与优化

回溯算法实战:组合总和III的解题与优化

1. 问题背景与题目解析力扣第216题"组合总和 III"是回溯算法中的经典题型,要求找出所有k个不同数字的组合,这些组合的和等于n,且满足以下条件:只使用数字1到9每个数字最多使用一次组合中不能有重复的数字集合这个题目在…

2026/7/28 3:55:04 阅读更多 →
行空板轻量级目标追踪:LK光流与单应性矩阵实战

行空板轻量级目标追踪:LK光流与单应性矩阵实战

1. 项目概述:当行空板遇上LK光流与单应性矩阵 最近在捣鼓行空板,想在上面跑点“硬核”的视觉应用,比如实时目标追踪。直接上YOLO这类深度学习模型?对行空板来说负担有点重,延迟和功耗都是问题。于是,我把目…

2026/7/28 3:55:04 阅读更多 →
C++继承与多态:从代码复用到运行时多态的设计实践

C++继承与多态:从代码复用到运行时多态的设计实践

1. 项目概述:为什么继承是C的基石干了这么多年C,我越来越觉得,继承这玩意儿,真不是书上那几页纸能讲透的。很多新手一上来就被“基类”、“派生类”、“虚函数”这些词唬住了,觉得这是“高级特性”,可以往后…

2026/7/28 3:55:04 阅读更多 →
自行车智能安全辅助系统:基于STM32与传感器融合的嵌入式AI实践

自行车智能安全辅助系统:基于STM32与传感器融合的嵌入式AI实践

1. 项目概述:为什么自行车需要一个“安全眼”?骑自行车通勤、锻炼或者休闲,是很多人生活中不可或缺的一部分。但无论是城市复杂的十字路口,还是郊外蜿蜒的乡道,骑行安全始终是悬在每位骑行者心头的一根刺。后视镜视野有…

2026/7/28 3:55:04 阅读更多 →
ESP32太阳能墨水屏气象站DIY:低功耗设计与免维护实现

ESP32太阳能墨水屏气象站DIY:低功耗设计与免维护实现

1. 项目概述:为什么选择太阳能墨水屏气象站?几年前,我还在为工作室里那个需要频繁更换电池的无线温湿度计头疼。虽然数据准确,但每隔几个月就得惦记着换电池,对于我这种懒人来说,体验实在算不上好。后来接触…

2026/7/28 3:55:04 阅读更多 →
OpenAI Python SDK 遇到 502/503 怎么排?先看自动重试、request_id 与 timeout

OpenAI Python SDK 遇到 502/503 怎么排?先看自动重试、request_id 与 timeout

调用 OpenAI API 或 OpenAI-compatible 网关时,日志里出现 502、503 或超时,最常见的误判是“我的代码只调用了一次,所以服务端只收到一次请求”。OpenAI Python SDK 本身有自动重试;如果业务层、任务队列或反向代理又各自重试&am…

2026/7/28 3:54:04 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/27 4:33:59 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/27 6:31:56 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/27 4:01:12 阅读更多 →

月新闻