HarmonyOS4.0从零开始的开发教程15HTTP数据请求

HarmonyOS(十三)HTTP数据请求

1 概述

日常生活中我们使用应用程序看新闻、发送消息等,都需要连接到互联网,从服务端获取数据。例如,新闻应用可以从新闻服务器中获取最新的热点新闻,从而给用户打造更加丰富、更加实用的体验。

img

那么要实现这样一种能实时从服务端获取数据的场景,就依赖于HTTP数据请求。

2 什么是HTTP

HTTP即超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

img

HTTP的工作原理正如上图所示,客户端向服务端发出一条HTTP数据请求,服务端接收请求后向客户端返回一些数据,然后客户端再对这些数据进行解析和处理。

3 如何发起HTTP请求

HTTP数据请求功能主要由http模块提供,包括发起请求、中断请求、订阅/取消订阅HTTP Response Header 事件等。

在进行网络请求前,您需要在module.json5文件中申明网络访问权限。

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

img

应用访问网络需要申请ohos.permission.INTERNET权限,因为HarmonyOS提供了一种访问控制机制即应用权限,用来保证这些数据或功能不会被不当或恶意使用。关于应用权限的的详细信息开发者可以参考:访问控制。

您可以按照以下步骤完成HTTP数据请求:

  1. 导入http模块。

    import http from '@ohos.net.http';
    
  2. 创建httpRequest对象。

    使用createHttp()创建一个httpRequest对象,里面包括常用的一些网络请求方法,比如request、destroy、on(‘headerReceive’)等。

    let httpRequest = http.createHttp();
    

    需要注意的是每一个httpRequest对象对应一个http请求任务,不可复用。

  3. 订阅请求头(可选)。

    用于订阅http响应头,此接口会比request请求先返回,可以根据业务需要订阅此消息。

    httpRequest.on('headersReceive', (header) => {console.info('header: ' + JSON.stringify(header));
    });
    
  4. 发起http请求。

    http模块支持常用的POST和GET等方法,封装在RequestMethod中。调用request方法发起网络请求,需要传入两个参数。第一个是请求的url地址,第二个是可选参数,类型为HttpRequestOptions,用于定义可选参数的类型和取值范围,包含请求方式、连接超时时间、请求头字段等。

    使用Get请求,参数内容需要拼接到URL中进行发送,如下示例中在url后面拼接了两个自定义参数,分别命名为param1和param2,值分别为value1和value2:

    let url= "https://EXAMPLE_URL?param1=v1&param2=v2";
    let promise = httpRequest.request(// 请求url地址url,{// 请求方式method: http.RequestMethod.GET,// 可选,默认为60sconnectTimeout: 60000,// 可选,默认为60sreadTimeout: 60000,// 开发者根据自身业务需要添加header字段header: {'Content-Type': 'application/json'}});
    

    POST请求参数需要添加到extraData里面,如下示例中在extraData里面定义添加了两个自定义参数param1和param2,值分别为value1和value2:

    let url = "https://EXAMPLE_URL";
    let promise = httpRequest.request(// 请求url地址url,{// 请求方式method: http.RequestMethod.POST,// 请求的额外数据。extraData: {"param1": "value1","param2": "value2",},// 可选,默认为60sconnectTimeout: 60000,// 可选,默认为60sreadTimeout: 60000,// 开发者根据自身业务需要添加header字段header: {'Content-Type': 'application/json'}});
    
  5. 处理响应结果。

    data为网络请求返回的结果,err为请求异常时返回的结果。data的类型为HttpResponse。

    promise.then((data) => { if (data.responseCode === http.ResponseCode.OK) {console.info('Result:' + data.result);console.info('code:' + data.responseCode);}
    }).catch((err) => {console.info('error:' + JSON.stringify(err));
    });
    

    其中data.responseCode为http请求返回的状态码,如果状态码为http.ResponseCode.OK(即200),则表示请求成功,更多状态码可以在ResponseCode中查看。

    data.result为服务器返回的业务数据,开发者可以根据自身业务场景解析此数据。

4 参考链接

  1. http数据请求参考:数据请求。
  2. 应用权限参考:访问控制。

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

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

相关文章

uniapp上传文件api如何使用

在uni-app中使用上传文件API有以下几个步骤&#xff1a; 创建 <input type"file"> 元素&#xff0c;并监听文件选择事件 <input type"file" change"chooseFile">在 methods 中定义 chooseFile 方法&#xff0c;处理文件选择事件 met…

发起POST请求时同时携带文件和自定义参数

目录 背景 说明 背景 发送请求时需要携带文件&#xff0c;又想携带自定义参数的场景。 说明 需要带文件&#xff0c;则Content-Type已经确定&#xff1a; Content-Type: multipart/form-data" 其次在form中设置自己的参数&#xff1a; -F a1 注意此时-d&#xff08…

MySQL进阶2 - 索引

MySQL进阶1 - 索引 1. 索引概述2. 索引结构2.1 二叉树2.2 B-Tree(多路平衡查找树)2.3 BTree2.4 Hash 3. 索引分类4. 索引语法5. SQL性能分析5.1 SQL执行频率5.2 慢查询日志5.3 profile5.4 explain执行计划5.3.1 EXPLAIN执行计划各字段含义&#xff1a; 6. 索引使…

SpringBoot+FastJson 优雅的过滤 Response Body

Spring 源码系列 1、Spring 学习之扩展点总结之后置处理器&#xff08;一&#xff09; 2、Spring 学习之扩展点总结之后置处理器&#xff08;二&#xff09; 3、Spring 学习之扩展点总结之自定义事件&#xff08;三&#xff09; 4、Spring 学习之扩展点总结之内置事件&#xf…

手把手教你Linux查找Java的安装目录并设置环境变量以及Linux下执行javac未找到命令的保姆级教学

查找Java的安装目录 输入 java -version&#xff0c;查看是否成功安装Java 输入 which java&#xff0c;查看Java的执行路径 输入 ls -lrt /usr/bin/java 输入 ls -lrt /etc/alternatives/java&#xff0c;/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.242.b08-0.el7_7.x86_64 就是J…

自动化测试(终章)webdriver的常用api(2)以及新的开始

目录 多层框架/窗口定位 多层框架的定位 frame是什么&#xff1f; 多层窗口定位 层级定位 使用 XPath 进行层级定位&#xff1a; 使用 CSS 选择器进行层级定位&#xff1a; 下拉框处理 alert、confirm、prompt 的处理 Alert 弹窗&#xff1a; Confirm 弹窗&#xff…

推免那些事

平生第一次搞推免&#xff0c;也是最后一次。错失了一些机会&#xff0c;也有幸获得了一些机会&#xff0c;值得祝庆&#xff0c;也值得反思。 以下记录为个人流水账。 个人背景 我的背景可以算不是非常好了&#xff0c;况且今年211受歧视比较严重。 学校&#xff1a;211&…

IDEA安装插件搜索不到插件的解决方法

解决idea安装所需插件&#xff0c;插件搜索不到的问题 1.通过设置代理和去掉使用安装链接的方式来解决的 File–>Settings–>Appearance & Behavior–>System Settings—>HTTP Proxy(修改为图片所示) 2.在系统设置中将更新选项中的“use secure connection”…

Xml与Json格式在线转换器

具体请前往&#xff1a;在线Json转Form表单参数工具

QEMU源码全解析 —— virtio(12)

接前一篇文章&#xff1a; 上一回对于virtio_device_realize函数进行了详细解析。在第2步中virtio_device_realize函数调用了具体类的realize函数&#xff0c;对于virtio balloon设备来说是virtio_balloon_realize函数。本回就来对于virtio_balloon_device_realize函数进行解析…

C语言 字符串处理相关函数大汇总

1&#xff0c;strcpy函数 将一个字符串复制到另一个字符串。 2&#xff0c;strncpy函数&#xff0c;将一个字符串的前n个字符复制到另一个字符串中。 3&#xff0c;strcat函数&#xff0c;将两个字符串连接起来。 4&#xff0c;strncat函数,用于将一个字符串的前n个字符追加…

C语言之函数式宏

目录 函数和数据类型 函数式宏 函数和函数式宏 函数式宏和对象式宏 不带参数的函数式宏 函数式宏和逗号运算符 函数式宏和函数类似并且比函数更加灵活&#xff0c;下面我们就来学习函数式宏的相关内容。 函数和数据类型 我们来编写一个程序&#xff0c;它能计算出所读取…

Jetpack Compose开发一个Android WiFi导航应用

在以前的一篇文章构建一个WIFI室内定位系统_wifi定位系统-CSDN博客中&#xff0c;我介绍了如何用Android来测量WiFi信号&#xff0c;上传到服务器进行分析后&#xff0c;生成室内不同地方的WiFi指纹&#xff0c;从而帮助进行室内导航。当时我是用的HTML5的技术来快速开发一个An…

Java RabbitMQ 的作用是什么? 使用场景有哪些?有哪些优缺点?

Java RabbitMQ 的作用是什么? 使用场景有哪些&#xff1f;有哪些优缺点? RabbitMQ 是一个开源的消息队列系统&#xff0c;用于在分布式系统中传递消息。它实现了 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;协议&#xff0c;为应用提供了可靠的消息传递…

QQ邮箱发送工具类的实现

我们在日常开发中&#xff0c;需要实现一个对邮箱的发送&#xff0c;今天就实现邮箱的发送工具类&#xff0c;只需要一些注册邮箱之后的配置即可&#xff0c;我这边使用的是qq邮箱 0.加上依赖 <!--邮箱--><dependency><groupId>org.springframework.boot&l…

基于vue开发 - 编写登录页面样式

vue创建项目&#xff0c;使用可视化界面安装插件-CSDN博客 使用vue UI安装路由插件-CSDN博客 基于vue开发-创建登录页-CSDN博客 在src/views文件夹中创建登录页面login.vue&#xff0c;在router/index.js文件中加入登录页的路由&#xff0c;然后在浏览器中输入登录页的路径就…

FL Studio终身永久2024中文版下载安装详细操作图文步骤教程

FL Studio2024版是一款在国内非常受欢迎的多功能音频处理软件&#xff0c;我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 2024版还为用户们准备了超多的音乐乐器伴奏&#xff0c;我们可以直接一键调取自己需要的音调。 FL Studio 2024版不仅拥…

算法设计基础——综合

算法设计基础中最基础的几种算法&#xff1a;分治法、减治法、贪心法、动态规划法、回溯法基本都掌握后&#xff0c;我们现在可以对这些算法做整体的比较&#xff0c;本次实验使用蛮力法、动态规划法、回溯法来求解0/1背包问题&#xff0c;来比较各个算法的优劣。 1. 蛮力法 …

11 Vue3中的computed计算属性

概述 Computed properties are unique data types that will reactively update only when the source data used within the property is updated. By defining a data property as a computed property, we can perform the following activities: Apply custom logic on t…

【ssh基础知识】

ssh基础知识 常用命令登录流程配置文件ssh密钥登录生成密钥上传公钥关闭密码登录 ssh服务管理查看日志ssh端口转发 ssh&#xff08;ssh客户端&#xff09;是一个用于登录到远程机器并在远程机器上执行命令的程序。 它旨在提供安全的加密通信在不安全的网络上的两个不受信任的主…