## # [使用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