當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Dart HttpClient用法及代碼示例


dart:io 庫中HttpClient 類的用法介紹如下。

用於與 HTTP 服務器通信的 HTTP 客戶端。

向 HTTP 服務器發送 HTTP 請求並接收響應。在對同一服務器的多個請求之間維護狀態,包括會話 cookie 和其他 cookie。

注意:HttpClient 提供低級 HTTP 函數。我們建議用戶從 package:http 中找到的更多 developer-friendly 和可組合 API 開始。

HttpClient 包含許多將 HttpClientRequest 發送到 Http 服務器並接收回 HttpClientResponse 的方法。例如,您可以分別對 GET 和 POST 請求使用 getgetUrlpostpostUrl 方法。

發出一個簡單的 GET 請求:一個例子

getUrl 請求是一個兩步過程,由兩個 Future 觸發。當第一個 future 以 HttpClientRequest 結束時,底層網絡連接已經建立,但沒有發送數據。在第一個未來的回調函數中,可以在請求上設置 HTTP 標頭和正文。第一次寫入請求對象或調用close 將請求發送到服務器。

當從服務器接收到 HTTP 響應時,close 返回的第二個 future 以 HttpClientResponse 對象結束。此對象提供對響應的標頭和正文的訪問。主體可用作由 HttpClientResponse 實現的流。如果存在實體,則必須讀取它。否則會導致資源泄露。如果未使用主體,請考慮使用HttpClientResponse.drain

var client = HttpClient();
try {
  HttpClientRequest request = await client.get('localhost', 80, '/file.txt');
  // Optionally set up headers...
  // Optionally write to the request object...
  HttpClientResponse response = await request.close();
  // Process the response
  final stringData = await response.transform(utf8.decoder).join();
  print(stringData);
} finally {
  client.close();
}

HttpClientRequest 的未來是由 getUrlopen 等方法創建的。

HTTPS 連接

HttpClient 可以發出 HTTPS 請求,使用 TLS (SSL) 安全網絡協議連接到服務器。如果服務器的證書由 Mozilla 編譯的知名受信任 CA 的默認列表上的根 CA(證書頒發機構)簽名,則使用 https: 方案調用 getUrl 將自動工作。

要添加自定義受信任的證書頒發機構,或將客戶端證書發送到請求證書的服務器,請將 SecurityContext 對象作為可選的 context 參數傳遞給 HttpClient 構造函數。可以在SecurityContext 對象上設置所需的安全選項。

標頭

默認情況下,所有HttpClient 請求都設置以下標頭:

Accept-Encoding: gzip

如果可能,這允許 HTTP 服務器對正文使用 gzip 壓縮。如果不需要此行為,請將 Accept-Encoding 標頭設置為其他內容。要關閉響應的 gzip 壓縮,請清除此標頭:

 request.headers.removeAll(HttpHeaders.acceptEncodingHeader)

關閉HttpClient

HttpClient 支持持久連接並緩存網絡連接,以便盡可能將它們重用於多個請求。這意味著網絡連接可以在請求完成後保持打開一段時間。使用HttpClient.close 強製HttpClient 對象關閉並關閉空閑的網絡連接。

打開和關閉代理

默認情況下,HttpClient 使用環境中可用的代理配置,請參閱 findProxyFromEnvironment 。要關閉代理的使用,請將 findProxy 屬性設置為 null

HttpClient client = HttpClient();
client.findProxy = null;

相關用法


注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 HttpClient class。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。