鸿蒙应用HTTP网络请求踩坑小记:从request到RCP的迁移心得
最近在做一个鸿蒙的天气小应用,把网络请求这块从老的 @ohos.net.http 迁到了新的 RCP(Remote Communication Platform),记录几个踩过的坑,给同样在迁的朋友省点时间。
一、老写法回顾
之前用 http 模块,每个请求都要自己创建 HttpRequest 对象,用完 destroy,代码比较啰嗦:
let req = http.createHttp();
req.request(url, { method: http.RequestMethod.GET }, (err, data) => {
if (!err) { console.info(JSON.stringify(data.result)); }
req.destroy();
});
二、迁到 RCP 的理由
RCP 把会话、拦截器、DNS这些能力都整合了,创建一个 rcp.Session 可以复用连接,也不用操心 destroy 的时机问题。特别是需要统一加 header、做重试的时候,拦截器写起来比原来清爽太多。
三、踩过的坑
1. Session 别到处新建。一开始我在每个页面都 new 一个 Session,结果连接没法复用。正确做法是应用启动时建一个全局单例。
2. 超时要显式配。RCP 默认超时和 http 模块不一样,弱网下会出现请求挂着不返回的情况,记得在 session 配置里把 requestTimeout 设上。
3. 证书校验。自签证书的服务在 RCP 下默认会握手失败,测试环境可以用 security 配置里的 remoteValidation 临时放开,但上架前一定要改回来。
4. 返回体类型。rcp.Response 的 responseBody 默认是 ArrayBuffer,习惯拿字符串的直接 toJSONString(),别像老接口那样期望 data.result 就是文本。
四、小结
整体迁移大概半天搞定,RCP 在连接复用和拦截器这块确实好用,推荐新项目直接上 RCP,老项目按模块逐步替换即可。有问题的欢迎评论区交流。
- 点赞
- 收藏
- 关注作者
评论(0)