鸿蒙网络管理模块06——使用rcp发送HTTP请求

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。

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();});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值