发送网络请求(ArkTS)
约束与限制
发送网络请求能力支持Phone、2in1、Tablet、Wearable设备。并且从5.1.1(19)开始,新增支持TV设备。
如何使用FETCH发起网络请求
发送一个HTTP请求,也可以设置请求头和请求体等参数,并返回来自服务器的HTTP响应。使用Promise异步回调。常用于获取资源,支持流处理和通过拦截器来处理请求和响应。
接口说明
具体API说明详见接口文档。
| 接口名 | 描述 |
|---|---|
| fetch(request: Request): Promise<Response> | 发送一个HTTP请求,并返回来自服务器的HTTP响应。使用Promise异步回调。 |
使用示例
-
导入模块。
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) => {// 错误处理,通过catch块,捕获error,并对error进行处理,本示例中会将错误信息展现到打印台上。console.error(`Response error code is ${err.code}, error data is ${err.data}`);});
如何发起GET网络请求
HTTP GET请求是常用的通信方式之一。为了有效地实现这一目标,RemoteCommunicationKit采用了Promise和异步回调的组合策略,不仅可以高效地从服务器获取数据,还可以提高代码的可读性和可维护性。
接口说明
具体API说明详见接口文档。
| 接口名 | 描述 |
|---|---|
| get(url: URLOrString, destination?: ResponseBodyDestination): Promise<Response> | 发送一个带有默认HTTP参数的HTTP GET请求,参数为开发者需要请求的地址及响应的目标,并返回来自服务器的HTTP响应。使用Promise异步回调。 |
使用示例
-
导入模块。
import { rcp } from '@kit.RemoteCommunicationKit';import { BusinessError } from '@kit.BasicServicesKit'; -
创建会话,会话发起get请求。
// 1、定义请求URL,此处只给出示例,还请根据实际情况将其替换为需要请求的URLconst getURL = "http://www.example.com/get";// 2、创建sessionconst session = rcp.createSession();// 3、使用session.get发起请求,以getURL为入参,使用Promise进行异步回调。session.get(getURL).then((response) => {console.info(`Response succeeded: ${response}`);}).catch((err: BusinessError) => {// 4、错误处理,通过catch块,捕获error,并对error进行处理,本示例中会将错误信息展现到打印台上。console.error(`Response error code is ${err.code}, error data is ${err.data}`);});
如何发起POST网络请求
发送一个带有默认HTTP参数的HTTP POST请求,并返回来自服务器的HTTP响应。使用Promise异步回调。常用于向服务器提交数据。与GET请求不同,POST请求将参数包含在请求主体中,适用于创建新资源、提交表单数据或执行某些操作。
接口说明
具体API说明详见接口文档。
| 接口名 | 描述 |
|---|---|
| post(url: URLOrString, content?: RequestContent, destination?: ResponseBodyDestination): Promise<Response> | 发送一个带有默认HTTP参数的HTTP POST请求,并返回来自服务器的HTTP响应。使用Promise异步回调。 |
使用示例
-
导入模块。
import { rcp } from '@kit.RemoteCommunicationKit';import { BusinessError } from '@kit.BasicServicesKit'; -
创建会话,使用会话发起post请求。
// 定义URL此处给出示例,请根据实际情况选择正确地址const postURL = "https://www.example.com";// 定义content,请根据实际情况选择const postContent: rcp.RequestContent = {fields: {'key1': 'value1','key2': 'value2','key3': 'value3'}}// 创建sessionconst session = rcp.createSession();// 使用post发起请求,使用Promise进行异步回调;其中content以及destination为可选参数,可根据实际情况选择session.post(postURL, postContent).then((response) => {console.info(`Response succeeded: ${JSON.stringify(response.headers)}`);console.info(`Response succeeded: ${JSON.stringify(response.statusCode)}`);console.info(`Response succeeded: ${JSON.stringify(postContent)}`);}).catch((err: BusinessError) => {console.error(`Response error code is ${err.code}, error data is ${err.data}`);})
如何发起PUT网络请求
在远场通信服务框架中,HTTP PUT请求用于更新服务器上的特定资源。作为幂等操作,它确保每次请求仅影响目标资源状态。通过Promise异步编程模型,可以有效地管理和控制请求执行流程,结构化处理异步操作和反馈。
接口说明
具体API说明详见接口文档。
| 接口名 | 描述 |
|---|---|
| put(url: URLOrString, content?: RequestContent, destination?: ResponseBodyDestination): Promise<Response> | 发送一个带有默认HTTP参数的HTTP PUT请求,并返回来自服务器的HTTP响应。使用Promise异步回调。 |
使用示例
-
导入模块。
import { rcp } from '@kit.RemoteCommunicationKit';import { BusinessError } from '@kit.BasicServicesKit'; -
创建会话,会话发起put请求。
// 创建会话const session = rcp.createSession();// 定义content,请根据实际情况选择const postContent: rcp.RequestContent = {fields: {'key1': 'value1','key2': 'value2','key3': 'value3'}}// 会话发起PUT请求,"`http://www.example.com"请根据实际情况替换为想要请求的URL地址`。session.put("http://www.example.com/put", postContent).then((response) => {// 对响应的处理,此处为示例,只做打印处理console.info(`Response succeeded: ${response}`);}).catch((err: BusinessError) => {// 请求错误处理console.error(`Response error code is ${err.code}, error data is ${err.data}`);});
如何发起HEAD网络请求
HTTP HEAD请求可高效访问服务器资源头信息。它与GET请求类似,但主要的区别在于,HEAD请求只返回响应头,而不返回实体内容,这使得其在获取资源的元信息,如文件大小、修改日期等,以及检查资源是否已更改等方面更加有效。
接口说明
具体API说明详见接口文档。
| 接口名 | 描述 |
|---|---|
| head(url: URLOrString): Promise<Response> | 发送一个带有默认HTTP参数的HTTP HEAD请求,并返回来自服务器的HTTP响应。使用Promise异步回调。 |
使用示例
-
导入模块。
import { rcp } from '@kit.RemoteCommunicationKit';import { BusinessError } from '@kit.BasicServicesKit'; -
创建会话,会话发起head请求。
// 1、创建会话const session = rcp.createSession();// 2、会话发起HEAD请求,"`http://www.example.com"请根据实际情况替换为想要请求的URL地址`。session.head("http://www.example.com/head").then((response) => {// 3、对响应的处理,此处为示例,只做打印处理console.info(`Response succeeded: ${response}`);}).catch((err: BusinessError) => {// 4、请求错误处理console.error(`Response error code is ${err.code}, error data is ${err.data}`);});
如何发起DELETE网络请求
在远场通信服务的框架中,Remote Communication Kit采用了一种结合发起 HTTP DELETE 请求与 Promise 异步处理的方法。具体操作如下:通过向预定义的 URL 发送一个包含默认 HTTP 参数的 HTTP DELETE 请求,即可实现对目标 URL 上相关资源的有效删除。这种机制不仅简化了请求的发送过程,还增强了异步处理的效率,确保了资源管理的灵活性和响应速度。
接口说明
具体API说明详见接口文档。
| 接口名 | 描述 |
|---|---|
| delete(url: URLOrString): Promise<Response> | 发送一个带有默认HTTP参数的HTTP DELETE请求,并返回来自服务器的HTTP响应。使用Promise异步回调。 |
使用示例
-
导入模块。
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 error code is ${err.code}, error data is ${err.data}`);});
如何使用Form发送HTTP简单的表格数据
在使用RequestContent指定HTTP请求中要发送的数据时,可以使用Form来发送简单的HTTP表单数据。
从6.0.1(21)开始,Form表单支持使用keys来指定表单中key的发送顺序。
使用示例
-
导入模块。
import { rcp } from '@kit.RemoteCommunicationKit';import { BusinessError } from '@kit.BasicServicesKit'; -
创建RequestContent。
// 创建Form表单数据。const simpleForm = new rcp.Form({"key1": "value1","key2": "value2",});// 指定表单中key的发送顺序。指定后,将按照keys列表中的顺序发送(不在列表中的key将不被发送);若不指定,则默认按各个key的hash顺序发送。simpleForm.keys = ["key2", "key1"];// 创建request请求。请将URL地址替换为实际访问的地址。let req = new rcp.Request("http://example.com");req.content = simpleForm; -
创建会话,并发起fetch请求。
try {// 创建会话。const session = rcp.createSession();// 会话发起请求。session.fetch(req).then((resp: rcp.Response) => {console.info(`Response succeeded: ${JSON.stringify(resp)}`);session.close();}).catch((err: BusinessError) => {// 请求错误处理。console.error(`Response error code is ${err.code}, error data is ${err.data}`);session.close();})} catch (err) {// 创建会话错误处理。console.error(`createSession error code is ${err.code}, error data is ${err.data}`);}
如何使用MultipartForm发送HTTP多部分表格数据
在使用RequestContent指定HTTP请求中要发送的数据时,可以使用MultipartForm来发送HTTP多部分表格数据。
从6.0.1(21)开始,MultipartForm表单支持使用keys来指定表单中key的发送顺序。
使用示例
-
导入模块。
import { rcp } from '@kit.RemoteCommunicationKit';import { BusinessError } from '@kit.BasicServicesKit'; -
创建RequestContent。
// 创建MultipartForm多部分表单数据。const multiForm = new rcp.MultipartForm({"key1": "value1","key2": "value2","key3": "value3",});// 定义多部分表单中的键的顺序。指定后,将按keys列表中的顺序发送(不在列表中的key不会被发送);如果不指定,则默认按照各个key的hash顺序发送。multiForm.keys = ["key3", "key1", "key2"];// 创建request请求。请将URL地址替换为实际访问的地址。let req = new rcp.Request("http://example.com");req.content = multiForm; -
创建会话,并发起fetch请求。
try {// 创建会话。const session = rcp.createSession();// 会话发起请求。session.fetch(req).then((resp: rcp.Response) => {console.info(`Response succeeded: ${JSON.stringify(resp)}`);session.close();}).catch((err: BusinessError) => {// 请求错误处理。console.error(`Response error code is ${err.code}, error data is ${err.data}`);session.close();})} catch (err) {// 创建会话错误处理。console.error(`createSession error code is ${err.code}, error data is ${err.data}`);}