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

HarmonyOS NEXT - 网络请求问题(http)

        HTTP(HyperText Transfer Protocal,超文本传输协议)是一种用于传输超媒体文档(如HTML)的应用层协议,它是客户端和服务器之间通信的基础;无论是获取数据、提交表单、上传文件,HTTP都扮演着重要角色。

        HarmonyOS NEXT开发过程中,HTTP请求也是不可或缺的技术,用于实现客户端和服务器之间的数据交互。同时,也需要注意网络权限、数据格式、合理配置等问题,确保应用的稳定性,以及避免以上问题未设置到位而产生的HTTP请求错误。

一、http返回数据的类型

        在使用@ohos.net.http模块发送HTTP请求时,可能有些人在得到响应时,获取到的结果是一串字符串,而不是JSON格式的对象;这是因为在执行http.request()请求时,未配置expectDataType,其类型分为以下几种:

名称描述
STRING返回的类型是字符串。
OBJECT返回的类型是Object。
ARRAY_BUFFER返回类型为ArrayBuffer。

        以上配置,可根据项目接口需要,对其合理配置即可。

        所以,在之前一篇讲述@ohos.net.http模块封装中,我们可以配置下expectDataType参数,示例代码如下图:

@ohos.net.http模块封装地址:HarmonyOS NEXT - 电商App实例二( 网络请求http)-CSDN博客。

HTTP数据请求官方地址:文档中心。

二、Content-Type配置

        在HarmonyOS NEXT中使用 @ohos.net.http 或 @ohos/axios发送POST请求是,如果后台接收到的数据为空,而通过Postman发送却正常,通常是因为请求配置或数据格式的问题。比如Content-Type未正确配置,具体如下图:

        如果后台期望的是application/x-www-form-urlencoded,前端在发送请求时,将请求header中Content-Type统一为application/x-www-form-urlencoded即可。如果在项目中,出现多种请求类型,可以多实例完成不同类型数据的请求操作。如下图:

import { HttpUtil } from './httpUtil'
/**
 * 初始化请求 实例类
 */
export const httpRequestForm = new HttpUtil('http://test.shop.com', {
  'Content-Type': 'application/x-www-form-urlencoded'
})

/**
 * 初始化请求 实例类
 */
export const httpRequestJson = new HttpUtil('http://test.shop.com', {
  'Content-Type': 'application/json'
})

        @ohos.net.http和@ohos/axios请求封装功能,之前已讲过,这里不细说。

地址一:HarmonyOS NEXT - 电商App实例二( 网络请求http)-CSDN博客。

地址二:HarmonyOS NEXT - 电商App实例三( 网络请求axios)_鸿蒙开发axios网络请求在预览器中没问题 在模拟器中无法发送请求 报错 couldn't r-CSDN博客。

三、数据格式不正确

        如axios请求中的data的数据格式与后台期望的格式不匹配,后台可能无法正确解析。后面期望的是JSON字符串,但传递的是普通对象,或者未将对象序列化为字符串。

3.1 未序列化

        这里通过axios封装实例,向后台发送登录请求。示例代码如下:

import { standardInterfaceResult } from '../types/http'
import { axiosRequestForm } from '../utils/request'

/**
 * 登录Api函数
 */
export const login = async (data) => {
  return await axiosRequestForm.post<standardInterfaceResult>('/login.php', data)
}

        axiosUtil中未对data数据进行序列化处理,如下图:

        在发送登录请求后,未得到正确响应,现在JSON解析错误。如下图:

3.2 序列化data数据

        将axiosUtil中data数据序列化为字符串,如下图:

        再次发送登录请求,查看控制台输出,则不会出现JSON解析错误的提示了。如下图:

四、模拟器网络代理

        估计很多小伙伴在预览器中开发一切正常,但是打开设备管理器中的模拟器后,发现http请求发送不出去,并无法得到响应了。

        previewer预览器:

        设备管理器中的模拟器:

        如下图,通过模拟器发送的请求,并未得到响应结果。

        其实这个问题很好解决,在模拟器中的网络请求配置下即可。

        首先,找到“网络配置”配置页,如下图:

        打开“网络配置”页,此时是“无代理”状态。如下图:

        将请求地址配置上去,并把端口号修改为80,点击“应用”按钮即可。

        此时,再发送登录请求,则可以正常得到服务端的响应了。如下图:

        http请求相关问题就讲到这,如果你有更多问题,欢迎随时沟通交流!


http://www.kler.cn/a/586812.html

相关文章:

  • FLASK和GPU依赖安装
  • Linux驱动开发框架基础——新旧字符设备驱动笔记整理(1)
  • 软考中级设计模式实战宝典:核心意图解析+适用场景+完整源码下载+高频题库
  • 如何在AVL树中高效插入并保持平衡:一步步掌握旋转与平衡因子 —— 平衡因子以及AVL结构篇
  • 【mysql】centOS7安装mysql详细操作步骤!—通过tar包方式
  • 机器人技能列表
  • 通过特征值和特征向量实现的图像压缩和特征提取
  • 大模型训练全流程深度解析
  • 力扣-单调栈-739 每日温度
  • spring-aop笔记
  • 2023 年全国职业院校技能大赛(中职组)移动应用与开发赛项 赛题第十套
  • Python基础入门掌握(九)
  • 设计签到 用redis 和 MySQL
  • 目标检测中衡量模型速度和精度的指标:FPS和mAP
  • 软件测试之测试覆盖率
  • c++三级(枚举问题)
  • 普通enum和enum class的区别
  • Winfrom基础知识41-60
  • Uniapp 开发 App 端上架用户隐私协议实现指南
  • Halcon 和 opencv比有什么区别与优劣