logo
积分中心
鸿蒙网络管理模块06——使用rcp发送HTTP请求
头像 蓝亭书序 2026-10-28 17:06:19    发布
0 浏览 0 点赞 0 收藏

1、前言

rcp是HarmonyOS中的远场通信套件(Remote Communication Kit)中提供的一套便捷的HTTP请求模块。我们在开发应用时,可以方便的通过Remote Communication Kit快速地向服务器发起数据请求。

❓ 可能有朋友会问:这个rcp和之前提到的@kit.NetworkKit中的http有啥区别?

答:都是发起HTTP请求的一个方式,但更推荐使用rcp,未来将持续迭代更新这部分内容。

我相信读者对HTTP传输协议已经很熟悉了,目前,HTTP请求方式分为7种,分别是:GET、POST、PUT、DELETE、OPTIONS、PATCH、HEAD。他们的说明简单介绍如下:

请求类型说明
GET获取资源,用于请求特定资源的表示形式。
【常用场景:用于获取资源,如网页、图片、视频等】
POST提交资源,用于提交实体,通常用于提交表单数据。
【常用场景:用于提交数据,如表单数据、上传文件等】
OPTIONS获取资源支持的HTTP方法,用于请求有关目标资源的通信选项。
【常用场景:用于获取资源支持的HTTP方法,如获取某个API支持的请求方式】
HEAD获取资源的元数据,与GET方法类似,但不返回资源的主体部分,只返回资源的元数据,如响应头。
【常用场景:用于获取资源的头部信息,如文件大小、修改时间等】
PUT更新资源,用于修改已经存在服务器上的资源。对指定URL路径上的资源进行完全替换。
【常用场景:用于更新资源,如更新文件、修改数据库记录等】
DELETE删除资源,用于删除目标资源。
【常用场景:用于删除资源的操作,比如删除用户、删除文章等】
PATCH更新资源的一部分,用于对资源进行局部修改。
【常用场景:更新服务器局部资源,比如资源的某些属性和字段,因此不需要替换整个资源】


2、权限

应用在使用RemoteCommunication Kit能力前,需要检查是否已经获取对应权限。如未获得授权,需要声明对应权限。

RemoteCommunication kit所需权限有(除取消网络请求,关闭会话,其余请求都需要权限):

  • ohos.permission.INTERNET:用于应用的权限,决定是否允许应用访问互联网。
  • ohos.permission.GET_NETWORK_INFO:用于获取设备网络信息的 API 。

需要在entry/src/main路径下的module.json5中配置所需申请的权限。示例代码如下所示:


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


如果是Native API,使用时还需要在CMakeLists.txt中设置动态库路径及头文件路径,并进行链接。

如编译target为entry,则添加如下命令:


target_include_directories(entry PUBLIC ${HMOS_SDK_NATIVE}/sysroot/usr/include)
target_link_directories(entry PUBLIC ${HMOS_SDK_NATIVE}/sysroot/usr/lib/aarch64-linux-ohos)
target_link_libraries(entry PUBLIC librcp_c.so) #链接librcp_c.so及其他依赖的so



3、使用rcp发送HTTP请求

rcp提供了多种发送HTTP请求的方式,常用的有:fetch、get、post、put、head、delete。

另外,还有cancel和close去取消和关闭网络请求。下面针对这几个场景做简单介绍。

👉🏻 fetch发送网络请求

fetch()方法发送HTTP请求时,可以设置请求头和请求体等参数,并返回来自服务器的HTTP响应。使用Promise异步回调。【常用于获取资源,支持流处理和通过拦截器来处理请求和响应】

接口定义为:fetch(request: Request): Promise<Response>

代码示例:


// 导入模块
import { rcp } from '@kit.RemoteCommunicationKit';
import { BusinessError } from '@kit.BasicServicesKit';

// 创建Request对象。"https://www.example.com"请根据实际情况替换为想要请求的URL地址。
const kHttpServerAddress = "https://www.example.com/fetch";
const request = new rcp.Request(kHttpServerAddress, "GET");

// 创建会话
const session = rcp.createSession();

// 发起请求,并处理结果
session.fetch(request).then((rep: rcp.Response) => {
  console.info(`Response succeeded: ${rep}`);
}).catch((err: BusinessError) => {
  console.error(`Response err: Code is ${err.code}, message is ${JSON.stringify(err)}`);
});


👉🏻 get发送网络请求

使用get()方法可以发送一个get请求。接口定义如下:


get(url: URLOrString, destination?: ResponseBodyDestination): Promise<Response>


代码示例:


// 导入模块
import { rcp } from '@kit.RemoteCommunicationKit';
import { BusinessError } from '@kit.BasicServicesKit';

//创建会话,会话发起get请求。"http://www.example.com"请根据实际情况替换为想要请求的URL地址。
const session = rcp.createSession();
session.get("http://www.example.com/get").then((response) => {
  console.info(`Response succeeded: ${response}`);
}).catch((err: BusinessError) => {
  console.error(`Response err: Code is ${err.code}, message is ${JSON.stringify(err)}`);
});


👉🏻 post发送网络请求

发送一个带有默认HTTP参数的HTTP POST请求,并返回来自服务器的HTTP响应。使用Promise异步回调。常用于向服务器提交数据。与GET请求不同,POST请求将参数包含在请求主体中,适用于创建新资源、提交表单数据或执行某些操作。接口定义如下:


post(url: URLOrString, content?: RequestContent, destination?: ResponseBodyDestination): Promise<Response>


代码示例:


// 导入模块
import { rcp } from '@kit.RemoteCommunicationKit';
import { BusinessError } from '@kit.BasicServicesKit';

// 创建会话,会话发起post请求。"http://www.example.com"请根据实际情况替换为想要请求的URL地址。
const session = rcp.createSession();
session.post("http://www.example.com/post", "data to send").then((response) => {
  console.info(`Response succeeded: ${response}`);
}).catch((err: BusinessError) => {
  console.error(`Response err: Code is ${err.code}, message is ${JSON.stringify(err)}`);
});


👉🏻 put发送网络请求

发送一个带有默认HTTP参数的HTTP PUT请求,并返回来自服务器的HTTP响应。使用Promise异步回调。常用于向服务器更新资源。PUT请求将更新的数据发送到特定的URL,用于替换指定资源的全部内容。接口定义如下:


put(url: URLOrString, content?: RequestContent, destination?: ResponseBodyDestination): Promise<Response>


代码示例:


// 导入模块
import { rcp } from '@kit.RemoteCommunicationKit';
import { BusinessError } from '@kit.BasicServicesKit';

// 创建会话,会话发起put请求。"http://www.example.com"请根据实际情况替换为想要请求的URL地址。
const session = rcp.createSession();
session.put("http://www.example.com/put", "data to send").then((response) => {
  console.info(`Response succeeded: ${response}`);
}).catch((err: BusinessError) => {
  console.error(`Response err: Code is ${err.code}, message is ${JSON.stringify(err)}`);
});


👉🏻 head发送网络请求

发送一个带有默认HTTP参数的HTTP HEAD请求,并返回来自服务器的HTTP响应。使用Promise异步回调。类似GET请求,但只返回相应头,不返回实体内容。可以获取资源的元信息,如文件大小、修改日期等。接口定义如下:


head(url: URLOrString): Promise<Response>


示例代码如下:


// 导入模块
import { rcp } from '@kit.RemoteCommunicationKit';
import { BusinessError } from '@kit.BasicServicesKit';

// 创建会话,会话发起head请求。"http://www.example.com"请根据实际情况替换为想要请求的URL地址。
const session = rcp.createSession();
session.head("http://www.example.com/head").then((response) => {
  console.info(`Response succeeded: ${response}`);
}).catch((err: BusinessError) => {
  console.error(`Response err: Code is ${err.code}, message is ${JSON.stringify(err)}`);
});


👉🏻 delete发送网络请求

发送一个带有默认HTTP参数的HTTP DELETE请求,并返回来自服务器的HTTP响应。使用Promise异步回调。用于从服务器删除资源。通过向指定URL发送DELETE请求,可以删除该URL上对应的资源。接口定义如下:


delete(url: URLOrString): Promise<Response>


代码示例:


// 导入模块
import { rcp } from '@kit.RemoteCommunicationKit';
import { BusinessError } from '@kit.BasicServicesKit';

//创建会话,会话发起delete请求。"http://www.example.com"请根据实际情况替换为想要请求的URL地址。
const session = rcp.createSession();
session.delete("http://www.example.com/delete").then((response) => {
  console.info(`Response succeeded: ${response}`);
}).catch((err: BusinessError) => {
  console.error(`Response err: Code is ${err.code}, message is ${JSON.stringify(err)}`);
});


👉🏻 cancel取消发送网络请求

接口定义如下:


cancel(requestToCancel?: Request| Request[]): void


示例代码如下:


// 导入模块
import { rcp } from '@kit.RemoteCommunicationKit';
import { BusinessError } from '@kit.BasicServicesKit';

// 创建会话,会话发起请求。"http://www.example.com"请根据实际情况替换为想要请求的URL地址。
const session = rcp.createSession();
let req = new rcp.Request("http://www.example.com/fetch", "GET");
session.fetch(req).then((response) => {
  console.info(`Response succeeded: ${response}`);
}).catch((err: BusinessError) => {
  console.error(`Response err: Code is ${err.code}, message is ${JSON.stringify(err)}`);
});

// 取消请求
session.cancel(req);



👉🏻 close关闭请求

通信请求结束后,需要关闭会话。调用此方法以释放与此会话关联的资源。接口定义如下:


close(): void


示例代码:


// 导入模块
import { rcp } from '@kit.RemoteCommunicationKit';
import { BusinessError } from '@kit.BasicServicesKit';

// 创建会话,会话发起请求后关闭会话。"http://www.example.com"请根据实际情况替换为想要请求的URL地址。
const session = rcp.createSession();
let req = new rcp.Request("http://www.example.com/fetch", "GET");
session.fetch(req).then((response) => {
  console.info(`Response succeeded: ${response}`);
  session.close();
}).catch((err: BusinessError) => {
  console.error(`Response err: Code is ${err.code}, message is ${JSON.stringify(err)}`);
  session.close();
});




©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
HarmonyOS
地址:北京市朝阳区北三环东路三元桥曙光西里甲1号第三置业A座1508室 电话:13391790444或(010)62178877
版权所有:电脑商情信息服务集团 北京赢邦策略咨询有限责任公司
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,我司致力于保护作者版权,如有侵权,请与我司联系删除

京ICP备:2022009079号-2

京公网安备:11010502051901号

ICP证:京B2-20230255