HarmonyOS 鸿蒙Next中如何处理网络请求的错误
HarmonyOS 鸿蒙Next中如何处理网络请求的错误
【解决方案】
-
查看故障发生时间点的网络环境(除了提供的关键词,日志也可搜索:WIFI、Network、connection等及其衍生词定位分析)。判断当前连接网络类型:isWifiConnected 1/0表示当前连接网络为WIFI/蜂窝;Call wifi func WIFI扫描和WIFI连接耗时;wlan0 state WIFI连接状态变化,其中4表示连接成功,6表示断开连接。网络切换:oldSupplier|newSupplier|SetNetworkTypeChange WIFI切到蜂窝,net_monitor 表示网络状态有变化或被探测。
-
检查module.json文件中相关网络权限是否配置正确。
-
分析网络请求报错的具体场景、主要分为Web组件加载页面提示报错和ArkUI界面执行特定数据请求或者相关网络服务时报错。
-
对于Web组件加载页面报错,利于相关工具或日志获取对应URL并通过浏览器打开,检查URL是否可达。URL不可达:根据对应URL去相应代码里判断是否设置了自定义页面请求响应使用本地HTML去呈现内容(一般本地HTML存在于项目resources的rawfile文件夹中),并进一步分析报错逻辑。查看日志是否涉及网络协议栈报错信息。
URL可达:通过打开浏览器的开发人员工具(或Devtools工具)进一步分析具体报错逻辑。结合背景知识中关于ArkWeb的内容,分析是否涉及安全、跨域和拦截等设置。
-
对于ArkUI界面数据请求或相关网络服务的报错,根据背景知识中相关服务错误码和常见FAQ,结合日志具体分析,主要确定属于客户端问题或服务端问题。对于没有相关错误码信息,也可分析相应代码实际日志打印,根据实际日志去判断。
-
除上述方案外,也存在应用自身将一些异常捕获后,以网络请求错误的形式体现,也可根据现象的报错信息找到具体代码位置,分析报错逻辑。
【场景分析】
-
网络状态差导致出现的网络请求报错同时也没有友好提示:参考如何判断当前网络能否上网,如果不能上网或者网络信号差时,提供友好提示或者设置合理的超时机制。
-
未配置相关网络权限或配置不正确导致出现网络请求报错:请求相应的网络权限,参考访问控制-声明权限声明对应权限。
-
故障问题发生在Web页面,包括URL不可达和URL可达,报错发生在前端页面,根据问题定位的实际分析给出结论:修复URL对应的网络地址的正常访问或者对应前端页面逻辑。
-
故障问题是数据请求或者其他网络服务模块的报错,根据背景知识涉及的实际错误码和错误信息给出结论,也可参考常见FAQ:检查是否与服务器正常建立连接并传输数据。
-
应用自身将一些异常捕获后,以网络请求错误的形式体现,根据实际异常分析给出结论:修复对应代码逻辑,或者替换为实际的异常信息提示。
【常见报错与问题】
-
http请求报错2300052:服务器没有返回内容,可能与服务器实现有关,需要排查服务器实现,同时也检查接口请求参数是否有误。
-
http请求报错2300003:URL格式错误,检查传入的URL格式不正确。
-
http请求报错2300006:域名无法解析,在无网络连接的情况下会报该错误,需要检查请求的URL编写是否正确和网络是否通畅。
-
http请求报错2300028:操作超时,可能原因是TCP连接超时或读写超时。排查网络或服务器问题,例如网络是否稳定、信号强度是否较弱、服务器负载是否过高、处理速度是否正常等。
-
http请求中下载文件报错2300023:向磁盘/应用程序写入接收数据失败,可能原因有:目标文件为只读文件,没有写入权限;下载的文件大小超过5M;上一次请求数据未接收完毕调用destroy销毁导致接收数据不完整。
-
http请求响应为空报错:“the request has been canceled or the number of requests exceeds 100”:当前不存在httpRequest对象,原因则可能是httpRequest请求次数超过100了创建失败,或者是被调用了destroy方法删掉了导致请求失败。
-
Socket连接报错误88:连接通道已关闭。可能原因有Socket连接未绑定IP、端口或者端口不可用。
-
网络请求成功,但是服务器返回异常错误码如"resultCode":3138,“message”:“系统繁忙,请稍后”:服务器对短时间内频繁接口请求有抑制,或者服务器出现异常。
-
网络波动情况下,底层系统是否会关闭Socket连接:在网络波动时(网络一下断开,一下连上),底层系统采用的策略是断开连接,关闭Socket端口,不会等待超时返回。
-
无网络环境下使用同步方法获取网络状态报错:无网环境调用同步方法请求无法解析拿到nethandle对应内容,方法执行时产生报错,可采用try-catch方式获取报错信息。
-
httpRequest.request请求https接口SSL证书验证失败:“SSL peer certificate or SSH remote key was not OK”:https证书是一种数字证书,这种证书的主要作用是保护网站安全性。https证书校验则是指在建立https连接时对证书进行校验,保证连接的安全性,使网站的安全性更高(API参考:HttpRequestOptions)。https校验主要包括以下几个步骤,可依次检查:客户端向服务器发送https请求。
服务器返回SSL证书。客户端对证书进行校验。如果验证通过,客户端和服务器之间就建立起了安全的https连接。
更多关于HarmonyOS 鸿蒙Next中如何处理网络请求的错误的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS Next中处理网络请求错误时,建议采用以下方法:
-
使用try-catch捕获异常:在发起网络请求的代码块中,使用try-catch结构捕获可能抛出的异常,例如连接超时、服务器错误等。
-
检查HTTP状态码:通过
response.code()
获取HTTP响应状态码,针对非200状态码(如404、500等)进行错误分类处理。 -
利用回调机制:在网络请求的回调方法(如
onFailure
)中处理错误,可获取具体错误信息并执行重试或提示用户等操作。 -
统一错误处理:封装一个错误处理工具类,集中管理网络错误,提高代码复用性和可维护性。
示例代码片段:
import http from '@ohos.net.http';
let httpRequest = http.createHttp();
httpRequest.request(
"https://example.com",
{
method: http.RequestMethod.GET,
readTimeout: 5000,
connectTimeout: 5000
}, (err, data) => {
if (err) {
console.error('Request failed: ' + JSON.stringify(err));
// 处理错误,如重试或提示
return;
}
if (data.responseCode !== 200) {
console.error('HTTP error: ' + data.responseCode);
// 根据状态码处理错误
return;
}
// 处理成功响应
}
);
通过以上方式,可以有效识别和处理网络请求中的各类错误,确保应用稳定运行。