1 概述
日常生活中我們使用應(yīng)用程序看新聞、發(fā)送消息等,都需要連接到互聯(lián)網(wǎng),從服務(wù)端獲取數(shù)據(jù)。例如,新聞應(yīng)用可以從新聞服務(wù)器中獲取最新的熱點(diǎn)新聞,從而給用戶打造更加豐富、更加實(shí)用的體驗(yàn)。
那么要實(shí)現(xiàn)這樣一種能實(shí)時(shí)從服務(wù)端獲取數(shù)據(jù)的場(chǎng)景,就依賴于HTTP數(shù)據(jù)請(qǐng)求。
2 什么是HTTP
HTTP即超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)是一個(gè)簡(jiǎn)單的請(qǐng)求-響應(yīng)協(xié)議。它指定了客戶端可能發(fā)送給服務(wù)器什么樣的消息以及得到什么樣的響應(yīng)。
HTTP的工作原理正如上圖所示,客戶端向服務(wù)端發(fā)出一條HTTP數(shù)據(jù)請(qǐng)求,服務(wù)端接收請(qǐng)求后向客戶端返回一些數(shù)據(jù),然后客戶端再對(duì)這些數(shù)據(jù)進(jìn)行解析和處理。
3 如何發(fā)起HTTP請(qǐng)求
HTTP數(shù)據(jù)請(qǐng)求功能主要由http模塊提供,包括發(fā)起請(qǐng)求、中斷請(qǐng)求、訂閱/取消訂閱HTTP Response Header 事件等。
在進(jìn)行網(wǎng)絡(luò)請(qǐng)求前,您需要在module.json5文件中申明網(wǎng)絡(luò)訪問(wèn)權(quán)限。
{
"module" : {
"requestPermissions":[
{
"name": "ohos.permission.INTERNET"
}
]
}
}
4、說(shuō)明
應(yīng)用訪問(wèn)網(wǎng)絡(luò)需要申請(qǐng)ohos.permission.INTERNET權(quán)限,因?yàn)镠armonyOS提供了一種訪問(wèn)控制機(jī)制即應(yīng)用權(quán)限,用來(lái)保證這些數(shù)據(jù)或功能不會(huì)被不當(dāng)或惡意使用。
您可以按照以下步驟完成HTTP數(shù)據(jù)請(qǐng)求:
1、導(dǎo)入http模塊。
import http from '@ohos.net.http';
2、創(chuàng)建httpRequest對(duì)象。
使用createHttp()創(chuàng)建一個(gè)httpRequest對(duì)象,里面包括常用的一些網(wǎng)絡(luò)請(qǐng)求方法,比如request、destroy、on(‘headerReceive’)等。
let httpRequest = http.createHttp();
需要注意的是每一個(gè)httpRequest對(duì)象對(duì)應(yīng)一個(gè)http請(qǐng)求任務(wù),不可復(fù)用。
3、訂閱請(qǐng)求頭(可選)。
用于訂閱http響應(yīng)頭,此接口會(huì)比request請(qǐng)求先返回,可以根據(jù)業(yè)務(wù)需要訂閱此消息。
httpRequest.on('headersReceive', (header) => {
console.info('header: ' + JSON.stringify(header));
});
4、發(fā)起http請(qǐng)求。
http模塊支持常用的POST和GET等方法,封裝在RequestMethod中。調(diào)用request方法發(fā)起網(wǎng)絡(luò)請(qǐng)求,需要傳入兩個(gè)參數(shù)。第一個(gè)是請(qǐng)求的url地址,第二個(gè)是可選參數(shù),類型為HttpRequestOptions,用于定義可選參數(shù)的類型和取值范圍,包含請(qǐng)求方式、連接超時(shí)時(shí)間、請(qǐng)求頭字段等。
使用Get請(qǐng)求,參數(shù)內(nèi)容需要拼接到URL中進(jìn)行發(fā)送,如下示例中在url后面拼接了兩個(gè)自定義參數(shù),分別命名為param1和param2,值分別為value1和value2:
let url= "https://EXAMPLE_URL?param1=v1¶m2=v2";
let promise = httpRequest.request(
// 請(qǐng)求url地址
url,
{
// 請(qǐng)求方式
method: http.RequestMethod.GET,
// 可選,默認(rèn)為60s
connectTimeout: 60000,
// 可選,默認(rèn)為60s
readTimeout: 60000,
// 開發(fā)者根據(jù)自身業(yè)務(wù)需要添加header字段
header: {
'Content-Type': 'application/json'
}
});
POST請(qǐng)求參數(shù)需要添加到extraData里面,如下示例中在extraData里面定義添加了兩個(gè)自定義參數(shù)param1和param2,值分別為value1和value2:
let url = "https://EXAMPLE_URL";
let promise = httpRequest.request(
// 請(qǐng)求url地址
url,
{
// 請(qǐng)求方式
method: http.RequestMethod.POST,
// 請(qǐng)求的額外數(shù)據(jù)。
extraData: {
"param1": "value1",
"param2": "value2",
},
// 可選,默認(rèn)為60s
connectTimeout: 60000,
// 可選,默認(rèn)為60s
readTimeout: 60000,
// 開發(fā)者根據(jù)自身業(yè)務(wù)需要添加header字段
header: {
'Content-Type': 'application/json'
}
});
5、處理響應(yīng)結(jié)果。
data為網(wǎng)絡(luò)請(qǐng)求返回的結(jié)果,err為請(qǐng)求異常時(shí)返回的結(jié)果。data的類型為HttpResponse。
promise.then((data) => {
if (data.responseCode === http.ResponseCode.OK) {
console.info('Result:' + data.result);
console.info('code:' + data.responseCode);
}
}).catch((err) => {
console.info('error:' + JSON.stringify(err));
});
其中data.responseCode為http請(qǐng)求返回的狀態(tài)碼,如果狀態(tài)碼為http.ResponseCode.OK(即200),則表示請(qǐng)求成功。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-775264.html
data.result為服務(wù)器返回的業(yè)務(wù)數(shù)據(jù),開發(fā)者可以根據(jù)自身業(yè)務(wù)場(chǎng)景解析此數(shù)據(jù)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-775264.html
到了這里,關(guān)于HarmonyOS ArkTS HTTP數(shù)據(jù)請(qǐng)求(九)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!