Coroutine\Http\Client [编辑本页]

Swoole-2.0.0版本增加了对协程版Http客户端的支持。底层是用纯C编写,拥有超高的性能。

协程版Http客户端基于原生的AsyncIo中的异步Http客户端,基本的设置和使用方法和异步Http客户端一致,不在需要注册回调函数,只需要同步写法即可,使用方法和Swoole\Http\Client一致的此处不再列出,请参考 swoole\AsyncIO\异步Http/WebSocket客户端,对于使用有区别的函数,此处单独说明

启用协程Http客户端

  • 需要在编译swoole时增加--enable-coroutine来开启此功能。
  • swoole_http_client不依赖任何第三方库
  • 支持Http-ChunkKeep-Alive特性,暂不支持form-data格式
  • Http协议版本为HTTP/1.1
  • gzip压缩格式支持需要依赖zlib

构造方法

function Swoole\Coroutine\Http\Client->__construct(string $ip, int port, bool $ssl = false);
  • $ip 目标服务器的IP地址,可使用swoole_async_dns_lookup查询域名对应的IP地址
  • $port 目标服务器的端口,一般http80https443
  • $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和IO回包都设为默认的500ms

defer特性


请参考并发Client一节。


  • 曹显龙-通拓科技

    这里$ip不能为域名么

  • 尘缘

    应该可以用域名,$ip 目标服务器的IP地址,可使用swoole_async_dns_lookup查询域名对应的IP地址

  • 家辉

    怎么使用代理服务器?

  • 西海木頭

    $cli->set([ 'timeout' => 1]); timeout 的单位是什么,秒or毫秒?

  • alvin

    超时是秒