Coroutine\Http\Client
最后更新于:2022-04-02 06:27:09
# Coroutine\\Http\\Client
[TOC]
> 协程版Http客户端基于原生的AsyncIo中的异步Http客户端,基本的设置和使用方法和异步Http客户端一致,不在需要注册回调函数,只需要同步写法即可,使用方法和Swoole\\Http\\Client一致的此处不再列出,请参考[swoole\\AsyncIO\\异步Http/WebSocket客户端](异步Http-WebSocket客户端.md),对于使用有区别的函数,此处单独说明
`Swoole-2.0.0`版本增加了对协程版`Http`客户端的支持。底层是用纯`C`编写,拥有超高的性能。
## Saber - 人性化的协程HTTP客户端封装库
开发者可使用已封装的[协程HTTP客户端Saber](https://github.com/swlib/saber)
* 基于Swoole协程Client开发
* 人性化使用风格, ajax.js/axios.js/requests.py用户福音, 同时支持PSR风格操作
* 浏览器级别完备的Cookie管理机制, 完美适配爬虫/API代理应用
* 请求/响应/异常拦截器
* 多请求并发, 并发重定向优化
* 连接池, 自动化复用长连接
* 通道池(Chan): 最大连接数限制+无阻塞
* HTTPS连接, CA证书自动化支持
* HTTP/Socks5 Proxy支持
* WebSocket连接支持
* 毫秒级超时定时器
* 自动化 编码请求/解析响应 数据
* 响应报文自动编码转换
* 异步超大文件上传/下载, 断点重传
* 自动重试机制
* 单次并发数控制
* 多模式/超细粒度异常处理机制
## 启用协程Http客户端
* 不依赖任何第三方扩展库, 默认开启
* 支持`Http-Chunk`、`Keep-Alive`特性,支持`form-data`格式
* Http协议版本为`HTTP/1.1`
* 支持升级为websocket客户端
* `gzip`压缩格式支持需要依赖`zlib`库(默认都有)
## 构造方法
~~~
function Swoole\Coroutine\Http\Client->__construct(string $host, int port, bool $ssl = false);
~~~
* `$host`目标服务器主机地址,可以为`IP`或域名,底层自动进行域名解析
* `$port`目标服务器的端口,一般`http`为`80`,`https`为`443`
* `$ssl`是否启用`SSL/TLS`隧道加密,如果目标服务器是`https`必须设置`$ssl`参数为`true`
## 使用实例
~~~
$cli = new Swoole\Coroutine\Http\Client('127.0.0.1', 80);
$cli->setHeaders([
'Host' => "localhost",
"User-Agent" => 'Chrome/49.0.2587.3',
'Accept' => 'text/html,application/xhtml+xml,application/xml',
'Accept-Encoding' => 'gzip',
]);
$cli->set([ 'timeout' => 1]);
$cli->get('/index.php');
echo $cli->body;
$cli->close();
~~~
* 如果未设置`timeout`,则将底层`connect`和`request`超时设置为默认的`500ms`
#### defer特性
* * *
请参考[并发Client](并发调用.md)一节。
';