创建并发起一个HTTP网络请求,可以通过@ohos.net.http
模块来实现:
// 导入http模块,用于网络请求
import http from '@ohos.net.http';
// 定义HTTP请求的可配置选项
export interface httpOptions {
timeOut?: number;
ContentType?: string;
header?: Object;
}
// 设置默认的HTTP读取和连接超时时间
const HTTP_READ_TIMEOUT = 60000;
const HTTP_CONNECT_TIMEOUT = 60000;
// 设置默认的内容类型
const CONTENT_TYPE = 'application/json';
// httpRequest函数用于执行HTTP网络请求
export function httpRequest(
url: string,
method: http.RequestMethod = http.RequestMethod.GET,
params?: string | Object | ArrayBuffer,
options?: httpOptions
): Promise<ResponseResult> {
// 使用http模块创建一个HTTP请求对象
let httpRequest = http.createHttp();
// 发起请求并获取响应结果的Promise对象
let responseResult = httpRequest.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();
// 处理请求成功的结果
return responseResult.then((data: http.HttpResponse) => {
if (data.responseCode === http.ResponseCode.OK) {
// 将响应结果转换为字符串,然后尝试解析为JSON对象
let result = `${data.result}`;
let resultJson: ResponseResult = JSON.parse(result);
// 更新serverData对象的数据
serverData.data = resultJson;
serverData.code = 'success';
serverData.msg = resultJson?.msg;
} else {
// 如果响应码不是OK,则记录错误信息
serverData.msg = `error info & ${data.responseCode}`;
}
// 返回更新后的serverData对象
return serverData;
}).catch((err) => {
// 捕获并处理请求过程中的异常
serverData.msg = `${err}`;
return serverData;
});
}
// ResponseResult类用于封装响应结果
class ResponseResult {
code: string;
msg: string;
data: string | Object | ArrayBuffer;
// 构造函数,初始化响应结果的属性
constructor() {
this.code = '';
this.msg = '';
this.data = '';
}
}
代码解释:
- 导入模块:导入了
@ohos.net.http
模块,这是鸿蒙系统中处理网络请求的模块。 - 定义请求选项:通过
httpOptions
接口定义了HTTP请求可能的选项,如超时时间(timeOut
)、内容类型(ContentType
)和请求头(header
)。 - 常量定义:设置了读取超时和连接超时的时间常量,以及默认的内容类型。
httpRequest
函数:这是一个导出的函数,它接受URL、请求方法(默认为GET)、参数和选项作为输入,并返回一个Promise
对象。该函数内部创建了一个HTTP请求对象,设置了请求的超时时间、方法、额外数据和请求头,然后发送请求。- 响应处理:请求发送后,通过
.then()
方法处理响应。如果响应码是OK
,它会尝试将响应结果转换为JSON对象,并根据转换后的数据更新serverData
对象。如果响应码不是OK
或者转换出错,它会记录错误信息。 - 异常处理:使用
.catch()
方法捕获请求过程中可能发生的异常,并将错误信息记录在serverData
对象中。 ResponseResult
类:这是一个简单的类,用于存储响应的代码、消息和数据。它在httpRequest
函数中被实例化和使用。