Skip to main content

HTTP 用戶端是什麼

Laravel 的 HTTP 用戶端是包裝 Guzzle 的易用 API。 透過 Http Facade,你可以簡潔地寫出對外部 Web 服務或 API 的 HTTP 請求。
Guzzle 已預先安裝,你不需要額外設定即可使用。

基本請求

GET 請求

查詢參數可透過陣列傳入:

POST 請求

資料預設會以 application/json 傳送。

PUT / PATCH / DELETE

處理回應

Http::get() 等方法會回傳 Illuminate\Http\Client\Response 實例。 此物件提供大量檢查回應的方法。
JSON 回應也能以陣列索引方式存取。

請求選項

設定標頭

若要表明可接受 application/json,可用 acceptJson()
瀏覽器對 Laravel 的 AJAX 請求 CSRF 標頭(X-CSRF-TOKEN / X-XSRF-TOKEN)請參考 CSRF 保護

認證

Bearer token 認證(最常見):
Basic 認證

設定 base URL

若對同一主機有多個請求,可用 baseUrl() 統一。

傳送表單資料

若要用 application/x-www-form-urlencoded 送出,可用 asForm()

逾時

超過逾時會拋出 Illuminate\Http\Client\ConnectionException。 呼叫外部 API 建議務必設定逾時。

重試

可為暫時性網路故障或伺服器錯誤設定自動重試。
條件式重試(例如僅在連線錯誤時重試):

錯誤處理

手動檢查錯誤

Laravel HTTP 用戶端預設不會對 4xx / 5xx 回應拋出例外。 請透過 failed()clientError() 等明確檢查。

拋出例外

使用 throw(),錯誤時會拋出 Illuminate\Http\Client\RequestException
throw() 會回傳回應實例,因此可用方法鏈。
若要捕捉例外並處理:

並行請求

若要同時呼叫多個 API,可用 pool() 並行執行。
相較於依序執行可大幅加速,非常適合需呼叫多個外部 API 的儀表板等場景。

測試

以 Http::fake() 進行 mock

測試時使用 Http::fake(),可在不發送真實 HTTP 請求下模擬回應。
指定 URL 的回應:
回應序列(每次呼叫依序回傳不同回應):

驗證請求內容

Http::assertSent() 驗證請求內容。
測試時請務必於開頭呼叫 Http::fake()。 若忘記呼叫,實際請求將會送到外部 API。 也可以用 Http::preventStrayRequests() 讓未 fake 的 URL 請求觸發例外。

防止漏網請求

實戰範例:呼叫外部 API 的 Service 類別

實際專案中,將 HTTP 用戶端邏輯集中到 Service 類別是最佳實踐。
1

建立 Service 類別

2

在服務提供者註冊

3

從控制器使用

4

撰寫測試

總結

  • 將 HTTP 用戶端邏輯集中在 Service 類別
  • 一定要設定逾時(timeout()connectTimeout()
  • 為暫時性錯誤設定重試(retry()
  • 測試務必使用 Http::fake(),不要真的打外部 API
  • 在測試 setUp 中加入 Http::preventStrayRequests() 更保險
  • API token 或認證資訊透過環境變數與 config/services.php 管理
最後修改於 2026年8月2日