异步Http/WebSocket客户端

Swoole-1.8.0版本增加了对异步Http/WebSocket客户端的支持。底层是用纯C编写,拥有超高的性能。

启用Http客户端

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

构造方法

function swoole_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

对象属性

  • $body 请求响应后服务器端返回的内容
  • $statusCode 服务器端返回的Http状态码,如404200500
  • $set_cookie_headers 服务器端返回的原始COOKIE信息,包括了domainpath
  • $headers Http请求头
  • $cookies Http Cookie

异常错误码

某些情况下服务器端没有正常返回数据,底层会将$statusCode标记为负数。

  • -1:连接超时,服务器未监听端口或网络丢失,可以读取$errCode获取具体的网络错误码
  • -2:请求超时,服务器未在规定的timeout时间内返回response
  • -3:客户端请求发出后,服务器强制切断连接

  • tiger

    为什么只支持cli模式啊?

  • jimmy

    总有这个提示,不爽 WARNING swClient_inet_addr: DNS lookup will block the process. Please use swoole_async_dns_lookup.

  • 秦宏全

    @会说话的大脸猫 用处大啦,只是你接触的太少了而已,自动机器人都需要的,自动设置调用都需要

  • RobberPhex

    支持流式下载吗?比如我用swoole代理一个非常大的文件,upstream返回10M,我给client 10M,一直循环到结束。

  • 猫空

    为啥get后在get一次第二次数据没有呢

  • 穆白

    出现302 Found, 应该配置说明参数实现curl中CURLOPT_FOLLOWLOCATION的方法呢. 没有找到相应的文档那. 也就是异步客户端遇到了重定向怎么继续请求.

  • sailsweep

    -- 确实不错