GuzzleHttp 是一個功能完整的 PHP HTTP 客戶端,基於 cURL 封裝,讓開發者可以更方便地與 Web API 通訊。具備以下特性:
composer require guzzlehttp/guzzle
use GuzzleHttp\Client; $client = new Client(); $response = $client->post('https://example.com/api', [ 'form_params' => [ 'key1' => 'value1', 'key2' => 'value2', ] ]); echo $response->getBody();
$response = $client->post('https://example.com/api', [ 'headers' => [ 'Authorization' => 'Bearer your-token', 'Content-Type' => 'application/json', ], 'json' => [ 'key' => 'value' ] ]); echo $response->getBody();
$response = $client->get('https://jsonplaceholder.typicode.com/posts/1'); echo $response->getBody();
$data = json_decode($response->getBody(), true); echo $data['id'];
getContents()
$contents = $response->getBody()->getContents();
GuzzleHttp 提供多種例外類別可供辨識錯誤類型:
RequestException
ClientException
ServerException
ConnectException
TooManyRedirectsException
use GuzzleHttp\Client; use GuzzleHttp\Exception\ClientException; use GuzzleHttp\Exception\ServerException; use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\TooManyRedirectsException; $client = new Client(); try { $response = $client->request('GET', 'https://example.com/api'); echo $response->getBody(); } catch (ClientException $e) { echo "Client error: " . $e->getMessage(); } catch (ServerException $e) { echo "Server error: " . $e->getMessage(); } catch (ConnectException $e) { echo "Connection error: " . $e->getMessage(); } catch (TooManyRedirectsException $e) { echo "Too many redirects: " . $e->getMessage(); } catch (RequestException $e) { if ($e->hasResponse()) { $statusCode = $e->getResponse()->getStatusCode(); $reason = $e->getResponse()->getReasonPhrase(); echo "Request failed with status code $statusCode: $reason"; } else { echo "Request failed: " . $e->getMessage(); } } catch (\Exception $e) { echo "Other error: " . $e->getMessage(); }
GuzzleHttp 使用筆記(基於 cURL 的 HTTP 請求套件)
📌 功能介紹
GuzzleHttp 是一個功能完整的 PHP HTTP 客戶端,基於 cURL 封裝,讓開發者可以更方便地與 Web API 通訊。具備以下特性:
📌 GuzzleHttp 與原生 cURL 比較
📦 安裝
📥 使用方式
基本使用(POST 表單傳值)
use GuzzleHttp\Client; $client = new Client(); $response = $client->post('https://example.com/api', [ 'form_params' => [ 'key1' => 'value1', 'key2' => 'value2', ] ]); echo $response->getBody();傳送 JSON 請求(含 Header 設定)
$response = $client->post('https://example.com/api', [ 'headers' => [ 'Authorization' => 'Bearer your-token', 'Content-Type' => 'application/json', ], 'json' => [ 'key' => 'value' ] ]); echo $response->getBody();發送 GET 請求
$response = $client->get('https://jsonplaceholder.typicode.com/posts/1'); echo $response->getBody();回應處理:解析 JSON
$data = json_decode($response->getBody(), true); echo $data['id'];回應處理:使用
getContents()$contents = $response->getBody()->getContents();🚨 錯誤處理與例外
GuzzleHttp 提供多種例外類別可供辨識錯誤類型:
RequestException:所有 HTTP 請求相關錯誤的基底類別。ClientException:對應 HTTP 4xx 錯誤(客戶端錯)。ServerException:對應 HTTP 5xx 錯誤(伺服器端錯)。ConnectException:網路連線失敗(如 DNS 錯誤、超時)。TooManyRedirectsException:超過重定向限制。範例:完整 try-catch 錯誤處理
use GuzzleHttp\Client; use GuzzleHttp\Exception\ClientException; use GuzzleHttp\Exception\ServerException; use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Exception\RequestException; use GuzzleHttp\Exception\TooManyRedirectsException; $client = new Client(); try { $response = $client->request('GET', 'https://example.com/api'); echo $response->getBody(); } catch (ClientException $e) { echo "Client error: " . $e->getMessage(); } catch (ServerException $e) { echo "Server error: " . $e->getMessage(); } catch (ConnectException $e) { echo "Connection error: " . $e->getMessage(); } catch (TooManyRedirectsException $e) { echo "Too many redirects: " . $e->getMessage(); } catch (RequestException $e) { if ($e->hasResponse()) { $statusCode = $e->getResponse()->getStatusCode(); $reason = $e->getResponse()->getReasonPhrase(); echo "Request failed with status code $statusCode: $reason"; } else { echo "Request failed: " . $e->getMessage(); } } catch (\Exception $e) { echo "Other error: " . $e->getMessage(); }📚 相關連結