跳到主要内容

发送网络请求(ArkTS)

约束与限制

发送网络请求能力支持Phone、2in1、Tablet、Wearable设备。并且从5.1.1(19)开始,新增支持TV设备。

如何使用FETCH发起网络请求

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

接口说明

具体API说明详见接口文档

接口名描述
fetch(request: Request): Promise<Response>发送一个HTTP请求,并返回来自服务器的HTTP响应。使用Promise异步回调。

使用示例

  1. 导入模块。

    import { rcp } from '@kit.RemoteCommunicationKit';
    import { BusinessError } from '@kit.BasicServicesKit';
  2. 创建Request对象。"https://www.example.com"请根据实际情况替换为想要请求的URL地址

    const kHttpServerAddress = "https://www.example.com/fetch";
    const request = new rcp.Request(kHttpServerAddress, 'GET');
  3. 创建会话。

    const session = rcp.createSession();
  4. 发起请求,并处理返回结果。

    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异步回调。

使用示例

  1. 导入模块。

    import { rcp } from '@kit.RemoteCommunicationKit';
    import { BusinessError } from '@kit.BasicServicesKit';
  2. 创建会话,会话发起get请求。

    // 1、定义请求URL,此处只给出示例,还请根据实际情况将其替换为需要请求的URL
    const getURL = "http://www.example.com/get";

    // 2、创建session
    const 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异步回调。

使用示例

  1. 导入模块。

    import { rcp } from '@kit.RemoteCommunicationKit';
    import { BusinessError } from '@kit.BasicServicesKit';
  2. 创建会话,使用会话发起post请求。

    // 定义URL此处给出示例,请根据实际情况选择正确地址
    const postURL = "https://www.example.com";
    // 定义content,请根据实际情况选择
    const postContent: rcp.RequestContent = {
    fields: {
    'key1': 'value1',
    'key2': 'value2',
    'key3': 'value3'
    }
    }
    // 创建session
    const 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异步回调。

使用示例

  1. 导入模块。

    import { rcp } from '@kit.RemoteCommunicationKit';
    import { BusinessError } from '@kit.BasicServicesKit';
  2. 创建会话,会话发起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异步回调。

使用示例

  1. 导入模块。

    import { rcp } from '@kit.RemoteCommunicationKit';
    import { BusinessError } from '@kit.BasicServicesKit';
  2. 创建会话,会话发起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异步回调。

使用示例

  1. 导入模块。

    import { rcp } from '@kit.RemoteCommunicationKit';
    import { BusinessError } from '@kit.BasicServicesKit';
  2. 创建会话,会话发起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的发送顺序。

使用示例

  1. 导入模块。

    import { rcp } from '@kit.RemoteCommunicationKit';
    import { BusinessError } from '@kit.BasicServicesKit';
  2. 创建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;
  3. 创建会话,并发起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的发送顺序。

使用示例

  1. 导入模块。

    import { rcp } from '@kit.RemoteCommunicationKit';
    import { BusinessError } from '@kit.BasicServicesKit';
  2. 创建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;
  3. 创建会话,并发起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}`);
    }