harmonyOS HTTP数据请求能用类

2023-12-13 05:47:28

通用类

import http from '@ohos.net.http';

// 调试开关
const Test: boolean = true;

// API 地址
const Url: string = Test ? 'http://api.林.cn/' : 'http://api.林.cn/';

export function request(api: string, method: string, data: any, token: string = ''): Promise<any> {
  return new Promise((resolve, reject) => {
    // 构建完整的 URL
    const url = Url + api;

    // 创建 http 模块实例
    const httpRequest = http.createHttp();

    // 根据 'method' 参数确定请求方法
    const requestMethod = getRequestMethod(method);

    // 要添加的额外标头
    const customHeaders = {
      'Content-Type': 'application/json',
      'Authorization': token // 在这里添加您的自定义标头
    };

    // 发起 HTTP 请求
    const promise = httpRequest.request(
      url,
      {
        method: requestMethod,
        extraData: data,
        connectTimeout: 60000, // 60 秒
        readTimeout: 60000,
        header: { ...customHeaders } // 扩展自定义标头
      }
    );

    // 处理 Promise 的解析
    promise.then((responseData) => {
      if (responseData.responseCode === http.ResponseCode.OK) {
        resolve(responseData); // 使用响应数据解析 Promise
      } else {
        console.error('错误 - 响应代码: ' + responseData.responseCode);
        reject(new Error('HTTP 请求失败,响应代码为 ' + responseData.responseCode));
      }
    }).catch((error) => {
      console.error('错误: ' + JSON.stringify(error));
      reject(error); // 使用错误拒绝 Promise
    });
  });
}

// 辅助函数,将方法字符串映射到 http.RequestMethod
function getRequestMethod(method: string): http.RequestMethod {
  switch (method.toLowerCase()) {
    case 'get':
      return http.RequestMethod.GET;
    case 'post':
      return http.RequestMethod.POST;
    case 'put':
      return http.RequestMethod.PUT;
    case 'delete':
      return http.RequestMethod.DELETE;
    // 针对其他 HTTP 方法需要添加更多的情况
    default:
      throw new Error(`不支持的 HTTP 方法: ${method}`);
  }
}



调用方式


import { request } from '../tools/httpUtils';
@Entry //入口
@Component  //装饰
struct Index {
  @State message: string = '啾啾救援' //双向绑定
  build() {
    Row() {
      Column() {
        Image("http://www.jjsos.cn/images/menu_logo.png").width(300).interpolation(ImageInterpolation.High)
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button('确定').fontSize(30).backgroundColor("#000").onClick(()=>{
          this.message="JJSOS"
        })
        TextInput({placeholder:'用户名'}).type(InputType.PhoneNumber)
        TextInput({placeholder:'密码'}).type(InputType.Password)
        Button('确定登陆').onClick(()=>{
          const requestData = {
            "type": "1",
            "username": "13176630659",
            "password": "123456"
          };
          const  authToken:string=""
          const apiEndpoint = 'v2/auth/get-access-token';
          request(apiEndpoint, 'post', requestData, authToken)
            .then((responseData) => {
              // 这时写代码 
              console.log('Response:', responseData);
              // Perform actions based on the response
            })
            .catch((error) => {
              // Handle errors
              console.error('Error:', error);
              // Perform error-specific actions
            });

        })
      
      }
      .width('100%').backgroundColor("#aaa")
    }
    .height('100%').backgroundColor("#aaa")
  }
}

function authToken(apiEndpoint: string,arg1: string,requestData: { type: string; username: string; password: string; },authToken: any) {
throw new Error('Function not implemented.');
}

文章来源:https://blog.csdn.net/hzether/article/details/134888272
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。