【中工开发者】HarmonyOS应用开发中怎样发送网络哀求

打印 上一主题 下一主题

主题 1000|帖子 1000|积分 3000

【中工开发者】HarmonyOS应用开发中怎样发送网络哀求

无论在开发Wed应用,还是开发手机端应用,都离不开网络。而在网络开发中,发送HTTP哀求是必不可少的一部分。同样,在HarmonyOS应用开发中,无论是从第三方的API中获取数据,还是从后端服务器中获取数据,HTTP哀求是不可制止的。
下面是对在HarmonyOS应用开发中所需要涉及的HTTP相关内容的先容以及怎样实现的先容。
HTTP相关概述

HTTP采用B/S(Browser/Server)架构举行通信,同样也是一个应用层协议。它基于运输层TCP协议传输数据,并采用了轻便的哀求-相应方式举行交互,即:客户端根据自身需求发送相应的哀求至服务器,而服务器只能根据接收到的客户端哀求发送相应数据
HTTP主要包括:消息布局,哀求方法,状态码等
消息布局

HTTP 消息是客户端和服务器之间通信的底子,它们由一系列的文本行构成,遵照特定的格式和布局。主要分为哀求消息和相应消息。
哀求消息

哀求消息主要包罗:哀求行(request line)、哀求头(header)和哀求体构成
哀求行


  • 哀求方法:如GET,POST,PUT,DELETE等
  • URI:哀求的资源路径
  • HTTP版本:如 HTTP/1.1 或 HTTP/2
    1. GET /index.html HTTP/1.1
    复制代码
哀求头


  • 包罗了客户端环境信息、哀求体的大小(假如有)、客户端支持的压缩类型等。
  • 常见的哀求头包括Host、User-Agent、Accept、Accept-Encoding、Content-Length等。

哀求体


  • 在某些类型的HTTP哀求(如 POST 和 PUT)中,哀求体包罗要发送给服务器的数据。
相应消息

HTTP 相应主要由三部分构成,分别是:状态行、相应头和相应体。
状态行


  • HTTP 版本:与哀求消息中的版本相匹配。
  • 状态码:三位数,表示哀求的处理结果,如 200 表示乐成,404 表示未找到资源。
  • 状态信息:状态码的简短说明。
    1. HTTP/1.1 200 OK
    复制代码
相应头


  • 包罗了服务器环境信息、相应体的大小、服务器支持的压缩类型等。
  • 常见的相应头包括Content-Type、Content-Length、Server、Set-Cookie等。

相应体


  • 包罗服务器返回的数据,如哀求的网页内容、图片、JSON数据等。
  1. {
  2.     "message": "success感谢又拍云(upyun.com)提供CDN赞助",
  3.     "status": 200,
  4.     "date": "20241209",
  5.     "time": "2024-12-09 10:36:23",
  6.     "cityInfo": {
  7.         "city": "上海市",
  8.         "citykey": "101020100",
  9.         "parent": "上海",
  10.         "updateTime": "08:12"
  11.     },
  12.     "data": {
  13.         "shidu": "57%",
  14.         "pm25": 18.0,
  15.         "pm10": 30.0,
  16.         "quality": "优",
  17.         "wendu": "3.3",
  18.         "ganmao": "各类人群可自由活动",
  19.         "forecast": [
  20.             {
  21.                 "date": "09",
  22.                 "high": "高温 11℃",
  23.                 "low": "低温 5℃",
  24.                 "ymd": "2024-12-09",
  25.                 "week": "星期一",
  26.                 "sunrise": "06:41",
  27.                 "sunset": "16:51",
  28.                 "aqi": 31,
  29.                 "fx": "东北风",
  30.                 "fl": "2级",
  31.                 "type": "多云",
  32.                 "notice": "阴晴之间,谨防紫外线侵扰"
  33.             },
  34.             {
  35.                 "date": "10",
  36.                 "high": "高温 12℃",
  37.                 "low": "低温 8℃",
  38.                 "ymd": "2024-12-10",
  39.                 "week": "星期二",
  40.                 "sunrise": "06:41",
  41.                 "sunset": "16:51",
  42.                 "aqi": 33,
  43.                 "fx": "东北风",
  44.                 "fl": "2级",
  45.                 "type": "多云",
  46.                 "notice": "阴晴之间,谨防紫外线侵扰"
  47.             },
  48.             {
  49.                 "date": "11",
  50.                 "high": "高温 10℃",
  51.                 "low": "低温 8℃",
  52.                 "ymd": "2024-12-11",
  53.                 "week": "星期三",
  54.                 "sunrise": "06:42",
  55.                 "sunset": "16:52",
  56.                 "aqi": 32,
  57.                 "fx": "北风",
  58.                 "fl": "3级",
  59.                 "type": "小雨",
  60.                 "notice": "雨虽小,注意保暖别感冒"
  61.             },
  62.             {
  63.                 "date": "12",
  64.                 "high": "高温 10℃",
  65.                 "low": "低温 6℃",
  66.                 "ymd": "2024-12-12",
  67.                 "week": "星期四",
  68.                 "sunrise": "06:43",
  69.                 "sunset": "16:52",
  70.                 "aqi": 50,
  71.                 "fx": "北风",
  72.                 "fl": "3级",
  73.                 "type": "多云",
  74.                 "notice": "阴晴之间,谨防紫外线侵扰"
  75.             },
  76.             {
  77.                 "date": "13",
  78.                 "high": "高温 10℃",
  79.                 "low": "低温 4℃",
  80.                 "ymd": "2024-12-13",
  81.                 "week": "星期五",
  82.                 "sunrise": "06:44",
  83.                 "sunset": "16:52",
  84.                 "aqi": 53,
  85.                 "fx": "西北风",
  86.                 "fl": "3级",
  87.                 "type": "多云",
  88.                 "notice": "阴晴之间,谨防紫外线侵扰"
  89.             },
  90.             {
  91.                 "date": "14",
  92.                 "high": "高温 8℃",
  93.                 "low": "低温 3℃",
  94.                 "ymd": "2024-12-14",
  95.                 "week": "星期六",
  96.                 "sunrise": "06:44",
  97.                 "sunset": "16:52",
  98.                 "aqi": 66,
  99.                 "fx": "西北风",
  100.                 "fl": "3级",
  101.                 "type": "晴",
  102.                 "notice": "愿你拥有比阳光明媚的心情"
  103.             },
  104.             {
  105.                 "date": "15",
  106.                 "high": "高温 8℃",
  107.                 "low": "低温 3℃",
  108.                 "ymd": "2024-12-15",
  109.                 "week": "星期日",
  110.                 "sunrise": "06:45",
  111.                 "sunset": "16:53",
  112.                 "aqi": 59,
  113.                 "fx": "西北风",
  114.                 "fl": "3级",
  115.                 "type": "晴",
  116.                 "notice": "愿你拥有比阳光明媚的心情"
  117.             },
  118.             {
  119.                 "date": "16",
  120.                 "high": "高温 9℃",
  121.                 "low": "低温 1℃",
  122.                 "ymd": "2024-12-16",
  123.                 "week": "星期一",
  124.                 "sunrise": "06:45",
  125.                 "sunset": "16:53",
  126.                 "aqi": 62,
  127.                 "fx": "西北风",
  128.                 "fl": "2级",
  129.                 "type": "晴",
  130.                 "notice": "愿你拥有比阳光明媚的心情"
  131.             },
  132.             {
  133.                 "date": "17",
  134.                 "high": "高温 10℃",
  135.                 "low": "低温 3℃",
  136.                 "ymd": "2024-12-17",
  137.                 "week": "星期二",
  138.                 "sunrise": "06:46",
  139.                 "sunset": "16:54",
  140.                 "aqi": 63,
  141.                 "fx": "北风",
  142.                 "fl": "2级",
  143.                 "type": "多云",
  144.                 "notice": "阴晴之间,谨防紫外线侵扰"
  145.             },
  146.             {
  147.                 "date": "18",
  148.                 "high": "高温 11℃",
  149.                 "low": "低温 5℃",
  150.                 "ymd": "2024-12-18",
  151.                 "week": "星期三",
  152.                 "sunrise": "06:47",
  153.                 "sunset": "16:54",
  154.                 "aqi": 53,
  155.                 "fx": "东北风",
  156.                 "fl": "2级",
  157.                 "type": "晴",
  158.                 "notice": "愿你拥有比阳光明媚的心情"
  159.             },
  160.             {
  161.                 "date": "19",
  162.                 "high": "高温 11℃",
  163.                 "low": "低温 6℃",
  164.                 "ymd": "2024-12-19",
  165.                 "week": "星期四",
  166.                 "sunrise": "06:47",
  167.                 "sunset": "16:54",
  168.                 "aqi": 45,
  169.                 "fx": "东北风",
  170.                 "fl": "2级",
  171.                 "type": "阴",
  172.                 "notice": "不要被阴云遮挡住好心情"
  173.             },
  174.             {
  175.                 "date": "20",
  176.                 "high": "高温 8℃",
  177.                 "low": "低温 3℃",
  178.                 "ymd": "2024-12-20",
  179.                 "week": "星期五",
  180.                 "sunrise": "06:48",
  181.                 "sunset": "16:55",
  182.                 "aqi": 58,
  183.                 "fx": "西北风",
  184.                 "fl": "3级",
  185.                 "type": "多云",
  186.                 "notice": "阴晴之间,谨防紫外线侵扰"
  187.             },
  188.             {
  189.                 "date": "21",
  190.                 "high": "高温 5℃",
  191.                 "low": "低温 1℃",
  192.                 "ymd": "2024-12-21",
  193.                 "week": "星期六",
  194.                 "sunrise": "06:48",
  195.                 "sunset": "16:55",
  196.                 "aqi": 66,
  197.                 "fx": "西北风",
  198.                 "fl": "3级",
  199.                 "type": "晴",
  200.                 "notice": "愿你拥有比阳光明媚的心情"
  201.             },
  202.             {
  203.                 "date": "22",
  204.                 "high": "高温 6℃",
  205.                 "low": "低温 0℃",
  206.                 "ymd": "2024-12-22",
  207.                 "week": "星期日",
  208.                 "sunrise": "06:49",
  209.                 "sunset": "16:56",
  210.                 "aqi": 55,
  211.                 "fx": "西北风",
  212.                 "fl": "3级",
  213.                 "type": "多云",
  214.                 "notice": "阴晴之间,谨防紫外线侵扰"
  215.             },
  216.             {
  217.                 "date": "23",
  218.                 "high": "高温 8℃",
  219.                 "low": "低温 3℃",
  220.                 "ymd": "2024-12-23",
  221.                 "week": "星期一",
  222.                 "sunrise": "06:49",
  223.                 "sunset": "16:56",
  224.                 "aqi": 59,
  225.                 "fx": "西北风",
  226.                 "fl": "1级",
  227.                 "type": "多云",
  228.                 "notice": "阴晴之间,谨防紫外线侵扰"
  229.             }
  230.         ],
  231.         "yesterday": {
  232.             "date": "08",
  233.             "high": "高温 10℃",
  234.             "low": "低温 5℃",
  235.             "ymd": "2024-12-08",
  236.             "week": "星期日",
  237.             "sunrise": "06:40",
  238.             "sunset": "16:51",
  239.             "aqi": 28,
  240.             "fx": "北风",
  241.             "fl": "3级",
  242.             "type": "晴",
  243.             "notice": "愿你拥有比阳光明媚的心情"
  244.         }
  245.     }
  246. }
复制代码
在HarmonyOS应用开发中实现发送HTTTP哀求

1.获取权限

首先需要在module.json5设置文件中添加ohos.permission.INTERNET的权限
  1. "requestPermissions": [
  2.       {
  3.         "name":'ohos.permission.INTERNET'
  4.       }
  5.     ]
复制代码
2.哀求封装

将arkts中发送HTTP哀求的一些重复语句封装为一个工具类
1.导入
  1. import { http } from '@kit.NetworkKit'
复制代码
2.创建哀求对象
  1. let httpRequest = http.createHttp();
复制代码
3.订阅HTTP Response Header 变乱(可选)
根据需要,通过on方法订阅http相应头变乱,此接口会比request哀求先返回;
  1. httpRequest.on('headersReceive', (header) => {
  2.         console.info('header: ' + JSON.stringify(header));
  3.     });
复制代码
4.设置哀求
  1. let requestOptions = { // 请求配置选项
  2.         method: http.RequestMethod.GET,
  3.         header: {
  4.             'Content-Type': 'application/json',
  5.         },
  6.         connectTimeout: 3000, // 连接超时时间
  7.         readTimeout: 3000,    // 读取数据超时时间
  8.     }
复制代码
5.发送HTTP哀求
  1. let res = httpRequest.request(url, requestOptions);
复制代码
6.烧毁哀求对象
  1. httpRequest.destroy();
复制代码
完整代码如下:
  1. import { http } from '@kit.NetworkKit'
  2. ;export function requestUrl( url:string,callback:(result)=>void ){    let httpRequest = http.createHttp();
  3. //创建哀求对象    let requestOptions = { // 请求配置选项
  4.         method: http.RequestMethod.GET,
  5.         header: {
  6.             'Content-Type': 'application/json',
  7.         },
  8.         connectTimeout: 3000, // 连接超时时间
  9.         readTimeout: 3000,    // 读取数据超时时间
  10.     }
  11.     // 订阅HTTP Response Header 变乱    httpRequest.on('headersReceive', (header) => {
  12.         console.info('header: ' + JSON.stringify(header));
  13.     });
  14.     // 发起HTTP网络哀求    let res = httpRequest.request(url, requestOptions);
  15.     // 异步处理结果    res.then((data) => {        callback(data.result) // 返回数据后回调        httpRequest.destroy();
  16.     }).catch((err) => {        httpRequest.destroy();
  17. // 烧毁    });}
复制代码
3.调用封装工具类

1.导入工具类
  1. import { requestUrl } from '../http/HttpUtil';
复制代码
2.调用方法
  1. url: string = 'http://t.weather.itboy.net/api/weather/city/101020100'
  2. requestUrl(url, (result:string) => {
  3.       this.resultInfo = JSON.parse(result.toString())
  4.     })
复制代码
通过上述的简短先容,可以实现鸿蒙应用与后端的网络通信,满意差别业务场景的需求。假如想要更加高效。可以利用第三方库axios来实现网络哀求。
上述代码详情可以查看这里

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

怀念夏天

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表