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