## # [使用Guzzle執行HTTP請求](https://www.cnblogs.com/yehuisir/p/11114807.html)
### 不依賴其他擴展包
- https://www.cnblogs.com/yehuisir/p/11114807.html
- Guzzle中文文檔
https://guzzle-cn.readthedocs.io/zh_CN/latest/
Guzzle是一個PHP的HTTP客戶端,用來輕而易舉地發送請求,并集成到我們的WEB服務上。Guzzle提供了簡單的接口,構建查詢語句、POST請求、分流上傳下載大文件、使用HTTP cookies、上傳JSON數據等等。
#### 安裝
使用Composer安裝:
~~~
composer require guzzlehttp/guzzle
~~~
或者編輯項目的composer.json文件,添加Guzzle作為依賴:
~~~
{
"require": {
"guzzlehttp/guzzle": "~6.0"
}
}
~~~
然后執行`composer update`
#### Guzzle基本使用
發送請求
~~~
use GuzzleHttp\Client;
$client = new Client([
// Base URI is used with relative requests
'base_uri' => 'http://httpbin.org',
// You can set any number of default request options.
'timeout' => 2.0,
]);
$response = $client->get('http://httpbin.org/get');
$response = $client->delete('http://httpbin.org/delete');
$response = $client->head('http://httpbin.org/get');
$response = $client->options('http://httpbin.org/get');
$response = $client->patch('http://httpbin.org/patch');
$response = $client->post('http://httpbin.org/post');
$response = $client->put('http://httpbin.org/put');
~~~
設置查詢字符串
~~~
$response = $client->request('GET', 'http://httpbin.org?foo=bar');
~~~
或使用`query`請求參數來聲明查詢字符串參數:
~~~
$client->request('GET', 'http://httpbin.org', [
'query' => ['foo' => 'bar']
]);
~~~
#### 使用響應
獲取狀態碼:
~~~
$code = $response->getStatusCode(); // 200
$reason = $response->getReasonPhrase(); // OK
~~~
判斷頭部信息:
~~~
if ($response->hasHeader('Content-Length')) {
echo "It exists";
}
~~~
獲取返回的頭部信息:
~~~
echo $response->getHeader('Content-Length');
// Get all of the response headers.
foreach ($response->getHeaders() as $name => $values) {
echo $name . ': ' . implode(', ', $values) . "\r\n";
}
~~~
使用`getBody`方法可以獲取響應的主體部分(body),主體可以當成一個字符串或流對象使用
~~~
$body = $response->getBody();
~~~
可以將返回體轉換成字符串或者直接以字符串形式讀取:
~~~
$stringBody = (string) $body;
$content = $body->getContents();
~~~
#### 上傳文件
有時我們需要將文件傳送到另一個web服務上去,可以使用post文件流形式將文件數據傳送到指定web目錄。
~~~
$filename = 'a.jpg';
$data = fopen($filename, 'r');
$res = $client->request('POST', 'http://localhost:9999/upload.php', ['body' => $data]);
$body = $res->getBody();
print_r($body->getContents());
~~~
接收上傳文件的upload.php可以這樣寫:
~~~
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$data = file_get_contents('php://input');
$file = file_put_contents('b.jpg', $data);
if (FALSE === $file) {
echo '上傳成功';
} else {
echo '上傳失敗';
}
}
~~~
#### 提交表單
發送`application/x-www-form-urlencoded`?POST請求需要你傳入`form_params`?數組參數,數組內指定POST的字段。
~~~
$res = $client->request('POST', 'http://localhost:9999/form.php', [
'form_params' => [
'field_name' => 'abc',
'other_field' => '123',
'nested_field' => [
'nested' => 'hello'
]
]
]);
$body = $res->getBody();
print_r((string)$body);
~~~
在接收端form.php使用`$_POST`即可獲取上傳的表單數據。
#### 提交JSON數據
有時候我們在于API接口交互的時候需要將數據以特定的json格式傳給api,可以這樣寫:
~~~
$res = $client->request('POST', 'http://localhost:9999/json.php', [
'json' => ['foo' => 'bar']
]);
$body = $res->getBody();
print_r((string)$body);
~~~
接收端json.php使用`file_get_contents('php://input')`可獲得提交的json數據。
使用Guzzle還可以發送異步請求以及并發請求,具體使用方法可參照[Guzzle官方文檔](https://guzzle-cn.readthedocs.io/zh_CN/latest/quickstart.html)。
其實我們在一些特殊場景下可以使用[Swoole](https://www.helloweba.net/php/576.html)的協程特性實現異步的http客戶端,功能非常強大。
- 說明
- PHP快遞模式(一鍵同步多服務器程序文件)
- 多服務器文件md5對比
- 差異文件打包壓縮
- 上傳壓縮包
- 接收壓縮包
- 下載壓縮包
- 解壓覆蓋文件
- 數據庫同步
- 數據字典與數據庫創建
- 數據表測試數據
- 文件對比方法
- think-orm包
- think-orm數據操作模型包
- think-orm數據庫操作包
- think-migration數據庫遷移包
- think-migration數據庫填充數據
- think-migration數據庫創建數據表
- think-migration數據庫查詢數據
- Phinx數據庫遷移包
- Phinx數據庫填充數據
- Phinx數據庫創建數據表
- Phinx數據庫查詢數據
- 統一生成數據表,模型與數據表數據包
- 統一生成數據表
- 統一生成數據表數據
- 統一生成數據表模型
- 在線文檔與測試服務
- 自動生成api接口在線測試
- 自動生成api在線文檔
- 自動生成api接口ajax測試示例
- 管理后臺頁面(可以多個)
- 后臺首頁
- 后臺配置頁面
- 列表頁面
- 表單頁面
- 樹狀列表頁面
- 樹狀表單頁面
- 管理后臺程序
- 樹狀表單添加與修改保存
- 一般表單添加與修改保存
- 樹狀列表展示
- 一般列表
- 配置頁面
- 文件壓縮與解壓
- 文件壓縮
- 文件解壓
- 仿token操作
- 生成token
- 解析token
- 加解密組件hashids/hashids
- 隨機事件
- 隨機數生成
- 隨機字符串
- 隨機中文字符串
- 隨機中文姓名
- 隨機密碼串
- redis操作
- 異步操作
- 后臺表單操作
- 后臺列表頁面操作
- 模板文件生成新文件操作
- 按模板生成文件
- 生成模型文件
- 生成門面類
- 字符串操作
- 字符串包含
- 字符串排除前一個字符
- 字符串排除前N個字符
- 字符串排除前面一個字符串
- 字符串排除后一個字符
- 字符串排除后N個字符
- 字符串排除后面一個字符串
- 字符串截取
- 數組操作
- 交集
- 并集
- 差集
- 時間戳操作
- 上個月第一天日期
- 上個月最后一天日期
- 本月第一天日期
- 本月最后一天日期
- 下個月第一天日期
- 下個月最后一天日期
- 日期和時間處理組件-Carbon手冊
- 日期和時間處理組件-Carbon
- PHP 使用Carbon擴展進行時間處理
- Carbon類
- bootstrap操作
- 表格
- 警告框
- 徽章
- 文件操作
- 文件上傳
- 圖片操作
- 圖片上傳
- 圖片壓縮
- 圖片水印
- intervention/image使用
- log日志操作
- url操作
- url生成實例
- url解析實例
- 樹狀操作
- workerman操作
- 數據庫備份
- 門面操作
- 門面操作測試
- 數據字典生成
- 二維碼操作
- 二維碼生成
- logo二維碼
- think-cache緩存
- phpoffice/phpexcel使用
- Curl采集包
- 使用Guzzle執行HTTP請求
- fzaninotto/Faker中文填充數據表
- 安裝faker
- Faker創建假數據
- Faker基礎數據(英文)
- faker的Lorem(中文)
- 生成Person人物信息
- 生成Address地址信息
- 生成手機號Phone Number
- 生成公司Company信息
- 生成其他中文信息
- 生成時間日期Datetime