HTTP请求功能
数据由AI生成。
一、HTTP请求基础使用
在鸿蒙ArkUI中,使用@ohos.net.http
模块进行HTTP请求:
import http from '@ohos.net.http';
// 创建HTTP请求对象
let httpRequest = http.createHttp();
// 发起GET请求示例
httpRequest.request(
"https://api.example.com/data",
{
method: 'GET',
header: {
'Content-Type': 'application/json'
}
},
(err, data) => {
if (err) {
console.error('请求失败:', err);
return;
}
console.log('请求结果:', data.result);
}
);
二、常驻配置请求接口地址
建议创建一个配置文件httpConfig.ts
:
// httpConfig.ts
export const HttpConfig = {
baseUrl: 'https://api.example.com',
timeout: 60000,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
};
三、封装HTTP请求类
创建httpService.ts
封装类:
// httpService.ts
import http from '@ohos.net.http';
import { HttpConfig } from './httpConfig';
export class HttpService {
private static instance: HttpService;
private httpRequest: http.HttpRequest;
private constructor() {
this.httpRequest = http.createHttp();
}
public static getInstance(): HttpService {
if (!HttpService.instance) {
HttpService.instance = new HttpService();
}
return HttpService.instance;
}
public async get(url: string, params?: object): Promise<any> {
return this.request('GET', url, params);
}
public async post(url: string, data?: object): Promise<any> {
return this.request('POST', url, data);
}
private async request(method: string, url: string, data?: any): Promise<any> {
const fullUrl = `${HttpConfig.baseUrl}${url}`;
const options = {
method: method,
header: HttpConfig.headers,
readTimeout: HttpConfig.timeout,
connectTimeout: HttpConfig.timeout
};
if (method === 'GET' && data) {
// 处理GET请求参数
const query = Object.keys(data)
.map(key => `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`)
.join('&');
url = `${url}?${query}`;
} else if (data) {
// 处理POST等请求的body
options['extraData'] = JSON.stringify(data);
}
return new Promise((resolve, reject) => {
this.httpRequest.request(
fullUrl,
options,
(err, response) => {
if (err) {
reject(err);
return;
}
try {
const result = JSON.parse(response.result as string);
resolve(result);
} catch (e) {
reject(new Error('解析响应数据失败'));
}
}
);
});
}
}
四、使用封装好的请求类
1. 引用封装类
import { HttpService } from './httpService';
// 获取单例实例
const httpService = HttpService.getInstance();
2. 发起GET请求
async function fetchData() {
try {
const response = await httpService.get('/api/data', {
page: 1,
size: 10
});
console.log('获取数据成功:', response);
} catch (error) {
console.error('获取数据失败:', error);
}
}
fetchData();
3. 发起POST请求
async function submitData() {
try {
const response = await httpService.post('/api/submit', {
name: '张三',
age: 25
});
console.log('提交数据成功:', response);
} catch (error) {
console.error('提交数据失败:', error);
}
}
submitData();
五、注意事项
所有请求都是异步的,不会阻塞UI线程
使用Promise封装,可以用async/await语法简化调用
单例模式确保全局只有一个HTTP实例
错误处理通过try-catch捕获
这样封装后,项目中所有HTTP请求都可以通过简单的方法调用完成,代码更简洁,维护更方便。