在 ArkTS 网络请求中,重新封装一下 http 模块

在ArkTS中,重新封装http模块可以提供一个更简洁、更易于使用的API,同时隐藏底层细节,使开发者能够更专注于业务逻辑。以下是一个简单的示例,展示了如何重新封装鸿蒙系统的@kit.NetworkKit中的http模块:

typescript 复制代码
// 创建一个新的文件,例如 httpService.ets

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

import { http } from "@kit.NetworkKit";
import CommonConstant from "../constants/Contants";
import {AllType} from "./Type"

export class HttpService {
  private static instance: HttpService;

  // 私有构造函数,防止外部实例化
  private constructor() {
  }

  // 获取单例
  public static getInstance(): HttpService {
    if (!HttpService.instance) {
      HttpService.instance = new HttpService();
    }
    return HttpService.instance;
  }

  // 发起GET请求
  public async get(url: string, headers?: object) {
    const httpRequest = http.createHttp();
    try {
      const response = await httpRequest.request(url, {
        method: http.RequestMethod.GET,
        header: headers,
        readTimeout: CommonConstant.READ_TIMEOUT,
        connectTimeout: CommonConstant.CONNECT_TIMEOUT
      });
      if (response.responseCode === 200) {
        return response.result;
      } else {
        throw new Error(`请求失败: ${response.responseCode}`);
      }
    } catch (error) {
      throw new Error(`请求发生错误: ${error.message}`);
    }
  }

  // 发起POST请求
  public async post(url: string, params:AllType, headers?: object) {
    const httpRequest = http.createHttp();
    try {
      const response = await httpRequest.request(url,{
        method: http.RequestMethod.POST,
        header: {
          'Content-Type': 'application/json'
        },
        extraData: params,
        readTimeout: CommonConstant.READ_TIMEOUT,
        connectTimeout: CommonConstant.CONNECT_TIMEOUT
      });
      if (response.responseCode === 200) {
        return JSON.stringify(response.result);
      } else {
        throw new Error(`请求失败: ${response.responseCode}`);
      }
    } catch (error) {
      throw new Error(`请求发生错误: ${error.message}`);
    }
  }
}
;

使用示例:

typescript 复制代码
// 使用示例
// 在你的组件或服务中
import {HttpService } from "../common/utils/HttpUtils";
const httpService = HttpService.getInstance();

httpService.get('https://api.example.com/data')
  .then(response => {
    console.log('请求成功:', response);
  })
  .catch(error => {
    console.error('请求失败:', error);
  });

httpService.post('https://api.example.com/submit', { key: 'value' })
  .then(response => {
    console.log('提交成功:', response);
  })
  .catch(error => {
    console.error('提交失败:', error);
  });

在这个封装中,我们创建了一个HttpService类,它使用单例模式来确保全局只有一个实例。这个类提供了get和post方法,分别用于发起GET和POST请求。你可以根据需要添加其他HTTP方法,如PUT、DELETE等。

注意,这个封装假设服务器返回的是JSON格式的数据,并在成功响应时将其解析为JavaScript对象。如果服务器返回的是其他格式的数据,你需要相应地修改解析逻辑。

此外,这个封装没有处理请求超时、重试机制等高级功能。如果你需要这些功能,可以在封装中添加相应的逻辑。

最后,请确保在项目的config.json或module.json5文件中正确配置了网络权限,以便应用能够访问网络。

相关推荐
白帽攻防录9 小时前
SRC 挖洞:Roundcube 预认证 SQL 注入深度复盘,CVE-2026-48842 preg_replace 转义绕过怎么打穿邮件系统
网络·数据库·sql·网络安全·sql注入
要吃这碗饭12 小时前
深入理解 TCP 协议:从三次握手到可靠传输
网络·网络协议·tcp/ip
和裕13 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法
呉師傅14 小时前
得力P2500、M2500系列打印机硒鼓加粉及清零方法【纯享版】
运维·网络·windows·电脑
大侠归来15 小时前
TCP/IP 网络编程:多播与广播
网络·tcp/ip·智能路由器
Zelman16 小时前
HTTPS 协议
网络协议·https
weixin_4166679616 小时前
银河麒麟V10看门狗试验-1
网络·chrome·python
白帽攻防录16 小时前
SRC 挖洞:WSO2 JWT 算法混淆绕过深度复盘,CVE-2026-5430 不支持的算法怎么变成管理员
网络·算法·安全·网络安全·jwt
starzy199016 小时前
Flink 优化之网络缓存优化及参数详解:从数据传输机制到反压原理的生产调优指南
网络·缓存·flink
正经教主17 小时前
【FDE系列】阶段3:Day 58:Prompt 安全 — 注入、越狱与防护
网络·人工智能·安全·prompt·fde