在KaihongOS应用开发中,如何通过HTTP发起一个数据请求 - KaihongOS技术社区 - 电子技术论坛 - 广受欢迎的专业电子论坛
分享 收藏 返回
卞轮辉 关注 私信
[文章]

在KaihongOS应用开发中,如何通过HTTP发起一个数据请求

Http

在KaihongOS应用开发中,可以通过HTTP发起一个数据请求,支持常见的GET、POST、OPtiONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。详细的API接口文档请参考:@ohos.net.http (数据请求)
request接口开发步骤


  • 从@ohos.net.http.d.ts中导入http命名空间。
  • 调用createHttp()方法,创建一个HttpRequest对象。
  • 调用该对象的on()方法,订阅http响应头事件,此接口会比request请求先返回。可以根据业务需要订阅此消息。
  • 调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求。
  • 按照实际业务需要,解析返回结果。
  • 调用该对象的off()方法,取消订阅http响应头事件。
  • 当该请求使用完毕时,调用destroy()方法主动销毁。
示例代码

// 引入包名import http from '@ohos.net.http';import { BusinessError } from '@ohos.base';@Entry@Componentstruct Http {  @State message: string = 'Hello World';  sendRequest() {    // 每一个httpRequest对应一个HTTP请求任务,不可复用    let httpRequest = http.createHttp();    // 用于订阅HTTP响应头,此接口会比request请求先返回。可以根据业务需要订阅此消息    httpRequest.on('headersReceive', (header) => {      console.info('header: ' + JSON.stringify(header));    });    httpRequest.request(      // 填写HTTP请求的URL地址,可以带参数也可以不带参数。URL地址需要开发者自定义。请求的参数可以在extraData中指定      "EXAMPLE_URL",      {        method: http.RequestMethod.POST, // 可选,默认为http.RequestMethod.GET        // 开发者根据自身业务需要添加header字段        header: {          'Content-Type': 'application/json'        },        // 当使用POST请求时此字段用于传递请求体内容,具体格式与服务端协商确定        extraData: "data to send",        expectDataType: http.HttpDataType.STRING, // 可选,指定返回数据的类型        usingCache: true, // 可选,默认为true        priority: 1, // 可选,默认为1        connectTimeout: 60000, // 可选,默认为60000ms        readTimeout: 60000, // 可选,默认为60000ms        usingProtocol: http.HttpProtocol.HTTP1_1, // 可选,协议类型默认值由系统自动指定        usingProxy: false, // 可选,默认不使用网络代理,自API 10开始支持该属性        caPath:'/path/to/cacert.pem', // 可选,默认使用系统预制证书,自API 10开始支持该属性        clientCert: { // 可选,默认不使用客户端证书,自API 11开始支持该属性          certPath: '/path/to/client.pem', // 默认不使用客户端证书,自API 11开始支持该属性          keyPath: '/path/to/client.key', // 若证书包含Key信息,传入空字符串,自API 11开始支持该属性          certType: http.CertType.PEM, // 可选,默认使用PEM,自API 11开始支持该属性          keyPassword: "passwordToKey" // 可选,输入key文件的密码,自API 11开始支持该属性        },        multiFormDataList: [ // 可选,仅当Header中,'content-Type'为'multipart/form-data'时生效,自API 11开始支持该属性          {            name: "Part1", // 数据名,自API 11开始支持该属性            contentType: 'text/plain', // 数据类型,自API 11开始支持该属性            data: 'Example data', // 可选,数据内容,自API 11开始支持该属性            remoteFileName: 'example.txt' // 可选,自API 11开始支持该属性          }, {          name: "Part2", // 数据名,自API 11开始支持该属性          contentType: 'text/plain', // 数据类型,自API 11开始支持该属性          // data/app/el2/100/base/com.example.myapplication/haps/entry/files/fileName.txt          filePath: `${getContext(this).filesDir}/fileName.txt`, // 可选,传入文件路径,自API 11开始支持该属性          remoteFileName: 'fileName.txt' // 可选,自API 11开始支持该属性        }        ]      }, (err: BusinessError, data: http.HttpResponse) => {      if (!err) {        // data.result为HTTP响应内容,可根据业务需要进行解析        console.info('Result:' + JSON.stringify(data.result));        console.info('code:' + JSON.stringify(data.responseCode));        // data.header为HTTP响应头,可根据业务需要进行解析        console.info('header:' + JSON.stringify(data.header));        console.info('cookies:' + JSON.stringify(data.cookies));        // 当该请求使用完毕时,调用destroy方法主动销毁        httpRequest.destroy();      } else {        console.error('error:' + JSON.stringify(err));        // 取消订阅HTTP响应头事件        httpRequest.off('headersReceive');        // 当该请求使用完毕时,调用destroy方法主动销毁        httpRequest.destroy();      }    }    );  }  build() {    Row() {      Column() {        Text(this.message)          .fontSize(50)          .fontWeight(FontWeight.Bold)      }      .width('100%')    }    .height('100%')  }}

更多回帖

×
发帖