HarmonyOS(ArkTS) 访问远程接口

ArkTS 原生模块 @ohos.net.http 请求远程接口。

目录

1 ArkTs 封装 http请求函数

2 使用

3 后端数据格式

4 code 201 异常的解决办法


1 ArkTs 封装 http请求函数
import http from '@ohos.net.http';

// request请求参数
export interface httpOptions {
  timeOut?: number;
  ContentType?: string;
  header?: Object;
  state?: string;
  callBack?: Function;
}

const HTTP_READ_TIMEOUT = 60000;
const HTTP_CONNECT_TIMEOUT = 60000;
const CONTENT_TYPE = 'application/json'

// 封装request请求
export function httpRequest(
    url: string,
    method: http.RequestMethod = http.RequestMethod.GET,
    params?: string | Object | ArrayBuffer,
    options?: httpOptions
): Promise<ResponseResult> {
  const request = http.createHttp();
  // 处理状态
  if(options?.state) {
    switch (options.state) {
      case 'on':
        request.on('headersReceive', (header) => options.callBack(header));
        break;
      case 'once':
        request.on('headersReceive', (header) => options.callBack(header));
        break;
      case 'off':
        request.off('headersReceive');
        break;
      case 'destroy':
        request.destroy();
        break;
      default:
        break;
    }
    return;
  }

  // 处理请求
  const responseResult = request.request(url, {
    // 超时时间
    readTimeout: options?.timeOut || HTTP_READ_TIMEOUT,
    connectTimeout: options?.timeOut || HTTP_CONNECT_TIMEOUT,
    method,
    extraData: params || {},
    header: options?.header || {
      'Content-Type': options?.ContentType || CONTENT_TYPE
    },
  });
  let serverData: ResponseResult = new ResponseResult();
  // Processes the data and returns.
  return responseResult.then((data: http.HttpResponse) => {
    if (data.responseCode === http.ResponseCode.OK) {
      // Obtains the returned data.
      let result = `${data.result}`;

      let resultJson: ResponseResult = JSON.parse(result);

      serverData.result = resultJson.result;
      serverData.code = resultJson.code;
      serverData.msg = resultJson?.msg;

    } else {
      serverData.msg = `error info & ${data.responseCode}`;
    }
    return serverData;
  }).catch((err) => {
    serverData.msg = `${err}`;
    return serverData;
  })
}

// 封装请求数据
export class ResponseResult {
  /**
   * Code returned by the network request: success, fail.
   */
  code: string;

  /**
   * Message returned by the network request.
   */
  msg: string | Resource;

  /**
   * Data returned by the network request.
   */
  result: string | Object | ArrayBuffer;

  constructor() {
    this.code = '';
    this.msg = '';
    this.result = '';
  }
}

export default httpRequest;
2 使用
import httpRequest from '../utils/requestHttp';

@State url1: string = "192.168.3.4:9909/arkts/sample/jwt3?param=param";

// 定义接受对象
interface resultType {
  code: string;
  msg: string;
  result: resultValType | null;
}

// 定义返回数据对象
interface resultValType {
  jwtId:number //对象属性
  jwt: string; //对象属性
}

// 调用http接口
requestHttp1(){
  httpRequest(this.url1).then(res => {

    const data: resultType = res as resultType;
    console.info(JSON.stringify(data));

  });
}
3 后端数据格式

后端使用Java,返回的数据做了一层封装,格式:

{"code":200,"msg":"操作成功","result":{"jwtId":1,"jwt":"jwt@222313"}}

code状态码,msg消息描述,result返回对象数据,这里包含一个int数据项jwtId和一个字符串数据项jwt。

4 code 201 异常的解决办法

如果调用抛出异常 {"code":201,"message":"Permission denied"},是因为http请求需要 ohos.permission.INTERNET 权限。

在项目文件 module.json5 中添加 http 权限

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值