Guzzle入門教程
Guzzle是一個PHP的HTTP客戶端,用來輕而易舉地傳送請求,並整合到我們的WEB服務上。
- 介面簡單:構建查詢語句、POST請求、分流上傳下載大檔案、使用HTTP cookies、上傳JSON資料等等。
- 傳送同步或非同步的請求均使用相同的介面。
- 使用PSR-7介面來請求、響應、分流,允許你使用其他相容的PSR-7類庫與Guzzle共同開發。
- 抽象了底層的HTTP傳輸,允許你改變環境以及其他的程式碼,如:對cURL與PHP的流或socket並非重度依賴,非阻塞事件迴圈。
- 中介軟體系統允許你建立構成客戶端行為。
安裝
Guzzle是一個流行的PHP HTTP客戶端庫,用於傳送HTTP請求並處理響應。以下是一個簡單的Guzzle使用示例,包括GET和POST請求:
安裝 Guzzle:
composer require guzzlehttp/guzzle
GET 請求示例:
<?php
require 'vendor/autoload.php'; // 引入Composer自動載入檔案
use GuzzleHttp\Client;
// 建立一個Guzzle客戶端例項
$client = new Client();
// 傳送一個GET請求到某個API
$response = $client->request('GET', 'https://api.example.com/data');
// 獲取響應的HTTP狀態碼
$status_code = $response->getStatusCode();
echo "Status Code: " . $status_code . PHP_EOL;
// 獲取JSON格式響應體並解碼為陣列
$json_response = json_decode($response->getBody(), true);
print_r($json_response);
POST 請求示例(帶JSON資料):
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
// 建立一個帶有JSON內容的POST請求
$data = [
'key1' => 'value1',
'key2' => 'value2',
];
$client = new Client();
$options = [
RequestOptions::HEADERS => [
'Content-Type' => 'application/json',
],
RequestOptions::JSON => $data,
];
$response = $client->request('POST', 'https://api.example.com/submit', $options);
$status_code = $response->getStatusCode();
echo "Status Code: " . $status_code . PHP_EOL;
// 解析響應體
$json_response = json_decode($response->getBody(), true);
print_r($json_response);
在上述例子中,我們建立了Client
物件,並透過呼叫request()
方法來傳送HTTP請求。對於POST請求,我們設定了請求頭中的Content-Type
為application/json
,並且將要傳送的資料作為JSON格式放在選項中。
請根據實際API地址替換 https://api.example.com/data
和 https://api.example.com/submit
。同時,請確保你對目標API具有適當的訪問許可權。
Demo
$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.github.com/user', [
'auth' => ['user', 'pass']
]);
echo $res->getStatusCode();
// "200"
echo $res->getHeader('content-type');
// 'application/json; charset=utf8'
echo $res->getBody();
// {"type":"User"...'
// 傳送一個非同步請求
$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
$promise = $client->sendAsync($request)->then(function ($response) {
echo 'I completed! ' . $response->getBody();
});
$promise->wait();
https://guzzle-cn.readthedocs.io/zh-cn/latest/
歡迎關注公-眾-號【TaonyDaily】、留言、評論,一起學習。
Don’t reinvent the wheel, library code is there to help.
文章來源:劉俊濤的部落格
若有幫助到您,歡迎點贊、轉發、支援,您的支援是對我堅持最好的肯定(_)