[Flutter]HttpClient

小黑
發佈於APP
2023/12/25閱讀時間約 4 分鐘

配置

  • idleTimeout:在httpClient請求結束後,會繼續保持連線,直到超過idleTimeout值才會關閉連接。
  • connectionTimeout:和伺服器建立連線逾時,如果超過connectionTimeout值則會拋出SocketException異常。
  • maxConnectionsPerHost:同一個host,允許同時建立連線的最大數量。
  • autoUncompress:對應請求頭中的Content-Encoding,如果設定為true,則請求頭中Content-Encoding的值為目前HttpClient支援的壓縮演算法列表,目前只有"gzip"。
  • userAgent:對應請求頭中的User-Agent欄位。


HTTP請求認證

Http的認證(Authentication)機制可以用來保護非公開資源。如果Http伺服器開啟了認證,那麼使用者在發起請求時就需要攜帶使用者憑證。

Http的認證機制有:Digest認證、Client認證、Form Based認證等。目前Flutter的HttpClient只支援Basic和Digest兩種。這兩種認證方式最大的差別是傳送使用者憑證時,使用者憑證的內容,前者是通過Base64編碼,而後者是通過哈希運算。


Basic

httpClient.addCredentials(_uri,
"admin",
HttpClientBasicCredentials("username","password"),
);


Digest

httpClient.addCredentials(_uri,
"admin",
HttpClientDigestCredentials("username","password"),
);


證書校驗

  1. 如果請求的Https憑證是可信任CA核發的,且存取host包含在憑證的domain清單中(或符合通配規則)且憑證未過期,則驗證通過。
  2. 如果第一步驗證失敗,但在建立HttpClient時,已經透過SecurityContext將憑證新增至憑證信任鏈中,那麼當伺服器傳回的憑證在信任鏈中的話,則驗證通過。
  3. 如果1、2驗證都失敗了,如果用戶提供了badCertificateCallback回調,則會調用它,如果回調返回true,則允許繼續鏈接,如果返回false,則終止鏈接。


發送HTTP請求

HttpClient httpClient = HttpClient();//建立HttpClient
HttpClientRequest request = await httpClient.getUrl(uri);//開啟Http連接,設定請求頭
request.headers.add("user-agent", "test");//設定請求header
String payload="Hi";
request.add(utf8.encode(payload));
//request.addStream(_inputStream); //可以直接加入輸入流
HttpClientResponse response = await request.close();//等待連接伺服器
String responseBody = await response.transform(utf8.decoder).join();//讀取回應內容
httpClient.close();//請求結束

Http Method如httpClient.post()、httpClient.delete()等。 如果包含Query參數,可以在建置uri時添加,如:

Uri uri = Uri(scheme: "https", host: "xxx", queryParameters: {
"aa":"bb",
"cc":"dd"
});








7會員
78內容數
嗨,我是一名程式設計師,會在這分享開發與學習紀錄。
留言0
查看全部
發表第一個留言支持創作者!