不得不承认,年龄越大性格就越简单,更喜欢安静,不喜欢去了解别人,也不想被了解,只想静静的做自己喜欢的事......
目录
一,场景介绍
应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。
二,接口说明
HTTP数据请求功能主要由http模块提供。
使用该功能需要申请ohos.permission.INTERNET权限。
接口名 | 描述 |
---|---|
createHttp() | 创建一个http请求。 |
request() | 根据URL地址,发起HTTP网络请求。 |
requestInStream()10+ | 根据URL地址,发起HTTP网络请求并返回流式响应 |
destroy() | 中断请求任务。 |
on(type: 'headersReceive') | 订阅HTTP Response Header 事件。 |
off(type: 'headersReceive') | 取消订阅HTTP Response Header 事件。 |
once('headersReceive')8+ | 订阅HTTP Response Header 事件,但是只触发一次。 |
on('dataReceive')10+ | 订阅HTTP流式响应数据接收事件。 |
off('dataReceive')10+ | 取消订阅HTTP流式响应数据接收事件。 |
on('dataEnd')10+ | 订阅HTTP流式响应数据接收完毕事件。 |
off('dataEnd')10+ | 取消订阅HTTP流式响应数据接收完毕事件。 |
on('dataReceiveProgress')10+ | 订阅HTTP流式响应数据接收进度事件。 |
off('dataReceiveProgress')10+ | 取消订阅HTTP流式响应数据接收进度事件。 |
三,http请求使用
使用步骤为:
- 从@ohos.net.http.d.ts中导入http命名空间。
- 调用createHttp()方法,创建一个HttpRequest对象。
- 调用该对象的on()方法,可以根据业务需要订阅HTTP响应头事件、HTTP流式响应数据接收事件、HTTP流式响应数据接收进度事件和HTTP流式响应数据接收完毕事件。
- 调用该对象的requestInStream()方法,传入http请求的url地址和可选参数,发起网络请求。
- 按照实际业务需要,可以解析返回的响应码。
- 调用该对象的off()方法,取消订阅相应事件。
- 当该请求使用完毕时,调用destroy()方法主动销毁。
简单的演示**(只是简单演示,不作为项目使用)**
TypeScript
//1.从@ohos.net.http.d.ts中导入http命名空间。
import http from '@ohos.net.http';
export default class HttpClient {
private request :http.HttpRequest | null = null;
/**
* 2.创建HttpRequest
* */
createRequest(){
this.request =http.createHttp()
}
/*
* 3.用于订阅HTTP响应头,此接口会比request请求先返回。
* */
registerOn(){
this.request.on("headersReceive",(event)=>{
console.info("headersReceive--->",event)
})
}
/**
* 4,调用该对象的request()方法,传入http请求的url地址和可选参数,发起网络请求
* */
requestMethod(url:string,options: http.HttpRequestOptions){
this.request.request(url,options,(err,data)=>{
//5.解析请求结果
if(err){
//请求失败
}else {
//请求成功
//返回码
data.responseCode
//返回结果
data.result
// 6.取消订阅HTTP响应头事件
this.request.off('headersReceive');
// 7.当该请求使用完毕时,调用destroy方法主动销毁
this.request.destroy();
}
})
}
/***
*
* 创建请求Options
* */
createRequestOptions():http.HttpRequestOptions{
let options:http.HttpRequestOptions={}
//请求方式
options.method=http.RequestMethod.GET
// 当使用POST请求时此字段用于传递内容
options.extraData="extraData"
// 可选,指定返回数据的类型
options.expectDataType=http.HttpDataType.STRING
// 可选,默认为true
options.usingCache=true
// 可选,默认为1
options.priority=1
//开发者根据自身业务需要添加header字段
options.header=[{
'Content-Type': 'application/json'
}]
// 可选,默认为60000ms
options.readTimeout=60000
// 可选,默认为60000ms
options.connectTimeout=60000
// 可选,协议类型默认值由系统自动指定
options.usingProtocol=http.HttpProtocol.HTTP1_1
return options
}
}
调用者:
TypeScript
import HttpClient from './HttpTest'
export default class HttpUse{
private request:HttpClient | null = null
requestUrl(){
this.request = new HttpClient()
this.request.createRequest()
this.request.registerOn()
this.request.requestMethod('https://www.baidu.com',this.request.createRequestOptions())
}
}
注意:
1,需要添加网络权限
2,使用时尽量
①在work使用
②taskpool使用
③使用promise异步
防止阻塞主线程