網路請求 獲取資料

2021-07-23 00:00:37 字數 3497 閱讀 4277

通過http或者https協議與網路側伺服器交換資料是移動應用中常見的通訊方式。 node-fetch是rn推薦的請求方式。 

react native框架在初始化專案時, 引入了node-fetch包 (因為npm3把依賴全部攤平了,node-fetch就在node_modules目錄下)

下面就是專案中引入的node-fetch的原始碼:

聯網分為傳送請求和接受響應兩步。分開來分析下。

傳送http/https gong細分一下共有6個步驟 

1. 確定並準備請求位址與協議 

2. 確定請求中的http方法 

3. 準備請求中藥傳輸的訊息頭 

4. 準備身份驗證資訊 

5. 確定是否需要攜帶訊息體/引數 

6. 發出訊息

我們以查詢號碼歸屬地這個位址演示下。 

請求位址以http/https 開頭,為了便於修改位址,通常將位址放在乙個變數中。ios9以上預設無法訪問http請求, 具體參考後面的注意事項。

let url=`

`;

根據http協議的設計初衷,不同的方法對資源有不同的操作方式: 

+ put :增 

+ delete :刪 

+ post:改 

+ get:查

最常用的是get和post(實際上get和post都能辦到增刪改查) 

如果不指定,預設的方法為get,當前使用的api介面只支援get請求

let map=;
接下來需要設定請求中需要傳輸的訊息頭。訊息頭分為兩種,其中一種是協議規定的標準訊息頭;另一種是使用者自定義的訊息頭。

let privateheaders=;

map.headers=privateheaders; //加上自定義訊息頭

map.follow=

20;//設定允許最大的重定向次數,0不允許重定向

map.timeout=

0;//設定超時時間,0代表沒有

map.size=

0;//請求回應中訊息體最大允許的長度,0沒有限制

rn支援gzip/deflate格式編碼,不需要對此進行設定。rn收到gzip/deflate格式編碼會自動轉換為普通格式交給開發者。 

訊息頭是不區分大小寫的,如果有大寫字母,傳輸的時候回自動轉換為小寫。 

key資訊請自己註冊。

某些http請求需要加入身份驗證資訊,比如上面的apikey,有些時候在需要進行身份驗證的時候需要兩次http請求來完成。

如果需要帶訊息體,可以通過body配置,get請求不需要。

map.body=json.stringify();
post請求引數是放在訊息體中,而get直接拼裝在請求位址後面通過?間隔。

let url=``;

letparams='num=13126939916';

let requesturl=url+"?"+params;

將上述5步聯合起來就可以得到傳送http或https的請求片段。如下:

componentdidmount() ;

let privateheaders=;

map.headers=privateheaders; //加上自定義訊息頭

map.follow=

20;//設定允許最大的重定向次數,0不允許重定向

map.timeout=

0;//設定超時時間,0代表沒有

map.size=

0;//請求回應中訊息體最大允許的長度,0沒有限制

'this is body';

fetch(requesturl,map)

.then(

(result)=>)}

找到info.plist檔案新增nsallowsarbitraryloads

或者直接在xcode中開啟ios專案進行配置。

當請求成功,會返回乙個儲存有回應資料的物件

type 字串型別,記錄請求型別

url 請求位址

status 響應碼 200代表成功

ok 布林型別,記錄是否成功。

fetch 返回的 then 方法有乙個 response 引數,它是乙個 response 例項。 response 有如下方法:

下面就是完整的返回json的例子:

fetch(requesturl,map)

.then

((result)=>result.json()) // 返回帶有json格式的promise

.catch

((error)=>)

.then

((responsedata)=>);

componentdidmount() ;

let privateheaders=;

map.headers=privateheaders; //加上自定義訊息頭

map.follow=20;//設定允許最大的重定向次數,0不允許重定向

map.timeout=0;//設定超時時間,0代表沒有

map.size=0;//請求回應中訊息體最大允許的長度,0沒有限制

fetch(requesturl,map)

.then

((result)=>result.json()) //.json

() .catch

((error)=>)

.then

((responsedata)=>);

}

當然也可以用es2017的語法:

async network() 

});let responsejson = await response.json();

console.log(responsejson);

return responsejson;

} catch (error)

}

獲取網路資料

j2se實現網路的獲取 btn text 顯示網路 android layout width fill parent android layout height wrap content android text string btn text android id id showbtn andro...

網路獲取資料

1 http協議定義 www是以internet作為傳輸媒介的乙個應用系統,www網上基本的傳輸單位是web網頁。www的工作是基於客戶機 伺服器計算模型,由web瀏覽器和web伺服器構成,兩者之間採用超文字傳輸協議http進行通訊。http協議時基於tcp ip協議之上的協議,是web瀏覽器和we...

資料的網路請求

資料的網路請求有兩類 同步請求和非同步請求 又可以歸結為三種 第一種 同步請求,第二種 非同步 get 協議請求和非同步 get block 請求,第三種 post block 請求 從 ios9.0 之後,預設是 https 請求,如果想繼續使用 http 請求,需要在info.plist 點右鍵...