acl  3.5.3.0
acl::http_aclient类 参考abstract

#include <http_aclient.hpp>

+ 类 acl::http_aclient 继承关系图:
+ acl::http_aclient 的协作图:

Public 成员函数

 http_aclient (aio_handle &handle, sslbase_conf *ssl_conf=NULL)
 
virtual ~http_aclient (void)
 
virtual void destroy (void)=0
 
http_headerrequest_header (void)
 
http_aclientunzip_body (bool on)
 
bool is_unzip_body (void) const
 
http_aclientset_ssl_conf (sslbase_conf *ssl_conf)
 
sslbase_confget_ssl_conf (void) const
 
http_aclientenable_ssl (bool yes)
 
bool is_enable_ssl (void) const
 
bool open (const char *addr, int conn_timeout, int rw_timeout)
 
void close (void)
 
bool get_ns_addr (string &out) const
 
bool get_server_addr (string &out) const
 
aio_socket_streamget_conn (void) const
 
void send_request (const void *body, size_t len)
 
void ws_handshake (const void *key, size_t len)
 
void ws_handshake (const char *key="123456789xxx")
 
virtual void ws_handshake_before (http_header &reqhdr)
 
void ws_read_wait (int timeout=0)
 
bool ws_send_text (char *data, size_t len)
 
bool ws_send_binary (void *data, size_t len)
 
bool ws_send_ping (void *data, size_t len)
 
bool ws_send_pong (void *data, size_t len)
 
- Public 成员函数 继承自 acl::aio_open_callback
 aio_open_callback (void)
 
virtual ~aio_open_callback (void)
 
- Public 成员函数 继承自 acl::aio_callback
 aio_callback (void)
 
virtual ~aio_callback (void)
 
virtual bool write_callback (void)
 
virtual bool write_wakeup (void)
 

Protected 成员函数

virtual bool on_connect (void)=0
 
virtual void on_ns_failed (void)
 
virtual void on_connect_timeout (void)
 
virtual void on_connect_failed (void)
 
virtual bool on_read_timeout (void)
 
virtual void on_disconnect (void)
 
virtual bool on_http_res_hdr (const http_header &header)
 
virtual bool on_http_res_body (char *data, size_t dlen)
 
virtual bool on_http_res_finish (bool success)
 
virtual bool on_ws_handshake (void)
 
virtual void on_ws_handshake_failed (int status)
 
virtual bool on_ws_frame_text (void)
 
virtual bool on_ws_frame_binary (void)
 
virtual void on_ws_frame_closed (void)
 
virtual bool on_ws_frame_data (char *data, size_t dlen)
 
virtual bool on_ws_frame_finish (void)
 
virtual void on_ws_frame_ping (string &data)
 
virtual void on_ws_frame_pong (string &data)
 
bool open_callback (void)
 
bool timeout_callback (void)
 
void close_callback (void)
 
bool read_wakeup (void)
 
bool read_callback (char *data, int len)
 
bool handle_connect (const ACL_ASTREAM_CTX *ctx)
 
bool handle_ssl_handshake (void)
 
bool handle_res_hdr (int status)
 
bool handle_res_body (char *data, int dlen)
 
bool res_plain (char *data, int dlen)
 
bool res_unzip (zlib_stream &zstream, char *data, int dlen)
 
bool handle_res_body_finish (char *data, int dlen)
 
bool res_plain_finish (char *data, int dlen)
 
bool res_unzip_finish (zlib_stream &zstream, char *data, int dlen)
 
bool handle_websocket (void)
 
bool handle_ws_data (void)
 
bool handle_ws_ping (void)
 
bool handle_ws_pong (void)
 
bool handle_ws_other (void)
 
- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 

Protected 属性

unsigned status_
 
int rw_timeout_
 
int gzip_header_left_
 
bool keep_alive_
 
bool unzip_
 
aio_handlehandle_
 
sslbase_confssl_conf_
 
bool ssl_enable_
 
aio_socket_streamconn_
 
socket_streamstream_
 
http_headerheader_
 
HTTP_HDR_REShdr_res_
 
HTTP_REShttp_res_
 
websocketws_in_
 
websocketws_out_
 
stringbuff_
 
zlib_streamzstream_
 
struct sockaddr_storage ns_addr_
 
struct sockaddr_storage serv_addr_
 

详细描述

HTTP 客户端异步通信类,不仅支持标准 HTTP 通信协议,而且支持 Websocket 通信, 对于 HTTP 协议及 Websocket 通信均支持 SSL 加密传输; 另外,对于 HTTP 协议,根据用户设置,可以自动解压 GZIP 响应数据,这样在回调 方法 on_http_res_body() 中收到的便是解压后的明文数据。

在文件 http_aclient.hpp34 行定义.

构造及析构函数说明

◆ http_aclient()

acl::http_aclient::http_aclient ( aio_handle handle,
sslbase_conf ssl_conf = NULL 
)

构造函数

参数
handle{aio_handle&} 异步通信事件引擎句柄
ssl_conf{sslbase_conf*} 非 NULL 时自动采用 SSL 通信方式

◆ ~http_aclient()

virtual acl::http_aclient::~http_aclient ( void  )
virtual

成员函数说明

◆ close()

void acl::http_aclient::close ( void  )

异步关闭连接

◆ close_callback()

void acl::http_aclient::close_callback ( void  )
protectedvirtual

◆ destroy()

virtual void acl::http_aclient::destroy ( void  )
pure virtual

当对象销毁时的回调方法,子类必须实现

◆ enable_ssl()

http_aclient& acl::http_aclient::enable_ssl ( bool  yes)

当构造函数中 ssl_conf 参数非空时,可以调用此方法来设置是否启用 SSL 功能,如果 ssl_conf 非空,则内部 ssl_enable_ 缺省值为 true,可以通 过本方法关闭或开启 ssl 功能

参数
yes{bool}
返回
{http_aclient&}

◆ get_conn()

aio_socket_stream* acl::http_aclient::get_conn ( void  ) const
inline

连接成功后可调用本方法获得异步连接对象

返回
{aio_socket_stream*}

在文件 http_aclient.hpp144 行定义.

145  {
146  return conn_;
147  }
aio_socket_stream * conn_

◆ get_ns_addr()

bool acl::http_aclient::get_ns_addr ( string out) const

获得本次连接(无论成功或失败)所使用的 DNS 服务地址

参数
out{string&} 存储结果
返回
{bool} 返回 false 表示没有可用的 DNS 地址

◆ get_server_addr()

bool acl::http_aclient::get_server_addr ( string out) const

当连接成功、连接失败或连接超时时可调用此方法获得当前所连接用的应用服务器地址

参数
out{string&} 存储结果
返回
{bool} 返回 false 表示还没有设置所连接服务器的地址

◆ get_ssl_conf()

sslbase_conf* acl::http_aclient::get_ssl_conf ( void  ) const
inline

获得设置的 SSL 配置

返回
{sslbase_conf*} 为 NULL 表示未设置

在文件 http_aclient.hpp86 行定义.

87  {
88  return ssl_conf_;
89  }
sslbase_conf * ssl_conf_

◆ handle_connect()

bool acl::http_aclient::handle_connect ( const ACL_ASTREAM_CTX ctx)
protected

◆ handle_res_body()

bool acl::http_aclient::handle_res_body ( char *  data,
int  dlen 
)
protected

◆ handle_res_body_finish()

bool acl::http_aclient::handle_res_body_finish ( char *  data,
int  dlen 
)
protected

◆ handle_res_hdr()

bool acl::http_aclient::handle_res_hdr ( int  status)
protected

◆ handle_ssl_handshake()

bool acl::http_aclient::handle_ssl_handshake ( void  )
protected

◆ handle_websocket()

bool acl::http_aclient::handle_websocket ( void  )
protected

◆ handle_ws_data()

bool acl::http_aclient::handle_ws_data ( void  )
protected

◆ handle_ws_other()

bool acl::http_aclient::handle_ws_other ( void  )
protected

◆ handle_ws_ping()

bool acl::http_aclient::handle_ws_ping ( void  )
protected

◆ handle_ws_pong()

bool acl::http_aclient::handle_ws_pong ( void  )
protected

◆ is_enable_ssl()

bool acl::http_aclient::is_enable_ssl ( void  ) const
inline

判断内部是否启用了 ssl 功能

返回
{bool}

在文件 http_aclient.hpp104 行定义.

105  {
106  return ssl_enable_ && ssl_conf_;
107  }
sslbase_conf * ssl_conf_

◆ is_unzip_body()

bool acl::http_aclient::is_unzip_body ( void  ) const
inline

是否针对 GZIP 压缩数据自动进行解压

返回
{bool}

在文件 http_aclient.hpp67 行定义.

68  {
69  return unzip_;
70  }

◆ on_connect()

virtual bool acl::http_aclient::on_connect ( void  )
protectedpure virtual

当连接成功后的回调方法,子类必须实现,子类应在该方法里构造 HTTP 请求 并调用 send_request 方法向 WEB 服务器发送 HTTP 请求

返回
{bool} 该方法如果返回 false 则内部会自动关闭连接

◆ on_connect_failed()

virtual void acl::http_aclient::on_connect_failed ( void  )
inlineprotectedvirtual

当连接失败后的回调方法,在调用本方法后,内部自动调用 this->destroy() 方法

在文件 http_aclient.hpp170 行定义.

170 {}

◆ on_connect_timeout()

virtual void acl::http_aclient::on_connect_timeout ( void  )
inlineprotectedvirtual

当连接超时后的回调方法,在调用本方法后,内部自动调用 this->destroy() 方法

在文件 http_aclient.hpp165 行定义.

165 {}

◆ on_disconnect()

virtual void acl::http_aclient::on_disconnect ( void  )
inlineprotectedvirtual

对于连接成功后连接关闭后的回调方法,内部调用此方法后便立即回调 destroy() 方法

在文件 http_aclient.hpp183 行定义.

183 {};

◆ on_http_res_body()

virtual bool acl::http_aclient::on_http_res_body ( char *  data,
size_t  dlen 
)
inlineprotectedvirtual

当接收到 WEB 服务端的响应体时的回调方法,该方法可能会被多次回调 直到响应数据读完或出错

参数
data{char*} 读到的部分数据体内容
dlen{size_t} 本次读到的 data 数据的长度
返回
{bool} 返回 false 则将会关闭连接,否则继续读

在文件 http_aclient.hpp203 行定义.

204  {
205  (void) data;
206  (void) dlen;
207  return true;
208  }

◆ on_http_res_finish()

virtual bool acl::http_aclient::on_http_res_finish ( bool  success)
inlineprotectedvirtual

当读完 HTTP 响应体或出错后的回调方法

参数
success{bool} 是否成功读完 HTTP 响应体数据
返回
{bool} 如果成功读完数据体后返回 false 则会关闭连接

在文件 http_aclient.hpp215 行定义.

216  {
217  (void) success;
218  return true;
219  }

◆ on_http_res_hdr()

virtual bool acl::http_aclient::on_http_res_hdr ( const http_header header)
inlineprotectedvirtual

当接收到 WEB 服务端的响应头时的回调方法

参数
header{const http_header&}
返回
{bool} 返回 false 则将会关闭连接,否则继续读

在文件 http_aclient.hpp190 行定义.

191  {
192  (void) header;
193  return true;
194  }

◆ on_ns_failed()

virtual void acl::http_aclient::on_ns_failed ( void  )
inlineprotectedvirtual

当域名解析失败时的回调方法,在调用本方法后,内部自动调用 this->destroy() 方法

在文件 http_aclient.hpp160 行定义.

160 {}

◆ on_read_timeout()

virtual bool acl::http_aclient::on_read_timeout ( void  )
inlineprotectedvirtual

当网络读超时时的回调方法

返回
{bool} 当读超时回调方法返回 true,则内部会继续读数据,如果 返回 false,则该连接将会被关闭,接着回调 on_disconnect() 虚方法

在文件 http_aclient.hpp177 行定义.

177 { return false; }

◆ on_ws_frame_binary()

virtual bool acl::http_aclient::on_ws_frame_binary ( void  )
inlineprotectedvirtual

当读到一个 binary 类型的帧时的回调方法

返回
{bool} 返回 true 表示继续读,否则则要求关闭连接

在文件 http_aclient.hpp248 行定义.

248 { return true; }

◆ on_ws_frame_closed()

virtual void acl::http_aclient::on_ws_frame_closed ( void  )
inlineprotectedvirtual

当读到一个关闭帧数据时的回调方法

在文件 http_aclient.hpp253 行定义.

253 {}

◆ on_ws_frame_data()

virtual bool acl::http_aclient::on_ws_frame_data ( char *  data,
size_t  dlen 
)
inlineprotectedvirtual

在 websocket 通信方式,当读到数据体时的回调方法

参数
data{char*} 读到的数据地址
dlen{size_t} 读到的数据长度
返回
{bool} 返回 true 表示继续读,否则则要求关闭连接

在文件 http_aclient.hpp261 行定义.

262  {
263  (void) data;
264  (void) dlen;
265  return true;
266  }

◆ on_ws_frame_finish()

virtual bool acl::http_aclient::on_ws_frame_finish ( void  )
inlineprotectedvirtual

当读完一帧数据时的回调方法

返回
{bool} 返回 true 表示继续读,否则则要求关闭连接

在文件 http_aclient.hpp272 行定义.

272 { return true; }

◆ on_ws_frame_ping()

virtual void acl::http_aclient::on_ws_frame_ping ( string data)
inlineprotectedvirtual

当收到 ping 数据包时的回调方法,当该回调方法返回后,如果用户没有将 data 数据清理,则内部会自动给对端写入 pong 信息,如果用户将 data 缓 冲区清理掉,则该方法返回后不会给对接发 pong 信息

参数
data{string&} 读到的数据

在文件 http_aclient.hpp280 行定义.

281  {
282  (void) data;
283  }

◆ on_ws_frame_pong()

virtual void acl::http_aclient::on_ws_frame_pong ( string data)
inlineprotectedvirtual

收到 pong 数据时的回调方法

参数
data{string&} 读到的数据

在文件 http_aclient.hpp289 行定义.

290  {
291  (void) data;
292  }

◆ on_ws_frame_text()

virtual bool acl::http_aclient::on_ws_frame_text ( void  )
inlineprotectedvirtual

当读到一个 text 类型的帧时的回调方法

返回
{bool} 返回 true 表示继续读,否则则要求关闭连接

在文件 http_aclient.hpp242 行定义.

242 { return true; }

◆ on_ws_handshake()

virtual bool acl::http_aclient::on_ws_handshake ( void  )
inlineprotectedvirtual

当 websocket 握手成功后的回调方法

返回
{bool} 返回 false 表示需要关闭连接,否则继续

在文件 http_aclient.hpp225 行定义.

226  {
227  // 开始异步读 websocket 数据
228  this->ws_read_wait(0);
229  return true;
230  }
void ws_read_wait(int timeout=0)

◆ on_ws_handshake_failed()

virtual void acl::http_aclient::on_ws_handshake_failed ( int  status)
inlineprotectedvirtual

当 websocket 握手失败后的回调方法

参数
status{int} 服务器返回的 HTTP 响应状态码

在文件 http_aclient.hpp236 行定义.

236 { (void) status; }

◆ open()

bool acl::http_aclient::open ( const char *  addr,
int  conn_timeout,
int  rw_timeout 
)

开始异步连接远程 WEB 服务器

参数
addr{const char*} 远程 WEB 服务器地址,格式为: domain:port 或 ip:port, 当地址为域名时,内部自动进行异步域名解析 过程,但要求在程序开始时必须通过 aio_handle::set_dns() 设置过域名 服务器地址,如果地址为 IP 则不需要先设置域名服务器地址
conn_timeout{int} 连接超时时间(秒)
rw_timeout{int} 网络 IO 读写超时时间(秒)
返回
{bool} 返回 false 表示连接失败,返回 true 表示进入异步连接中

◆ open_callback()

bool acl::http_aclient::open_callback ( void  )
inlineprotectedvirtual

实现了 acl::aio_open_callback.

在文件 http_aclient.hpp366 行定义.

366 { return true; }

◆ read_callback()

bool acl::http_aclient::read_callback ( char *  data,
int  len 
)
protectedvirtual

◆ read_wakeup()

bool acl::http_aclient::read_wakeup ( void  )
protectedvirtual

◆ request_header()

http_header& acl::http_aclient::request_header ( void  )

获得 HTTP 请求头,以便于应用添加 HTTP 请求头中的字段内容

返回
{http_header&}

◆ res_plain()

bool acl::http_aclient::res_plain ( char *  data,
int  dlen 
)
protected

◆ res_plain_finish()

bool acl::http_aclient::res_plain_finish ( char *  data,
int  dlen 
)
protected

◆ res_unzip()

bool acl::http_aclient::res_unzip ( zlib_stream zstream,
char *  data,
int  dlen 
)
protected

◆ res_unzip_finish()

bool acl::http_aclient::res_unzip_finish ( zlib_stream zstream,
char *  data,
int  dlen 
)
protected

◆ send_request()

void acl::http_aclient::send_request ( const void *  body,
size_t  len 
)

向 WEB 服务器发送 HTTP 请求,内部在发送后会自动开始读 HTTP 响应过程

参数
body{const void*} HTTP 请求的数据体,当为 NULL 时,内部会自 动采用 HTTP GET 方法
len{size_t} body 非 NULL 时表示数据体的长度

◆ set_ssl_conf()

http_aclient& acl::http_aclient::set_ssl_conf ( sslbase_conf ssl_conf)

除可以在构造函数中设置 SSL conf 外,还可以通过此方法设置,如果在 构造函数中设置的 ssl_conf 为 NULL,则内部自动将 ssl_enable_ 置为 false,通过本方法设置了 ssl_conf 后还需调用下面的 enable_ssl() 方法以启用 ssl 功能

参数
ssl_conf{sslbase_conf*} 为 NULL 时将取消 SSL功能
返回
{http_aclient&}

◆ timeout_callback()

bool acl::http_aclient::timeout_callback ( void  )
protectedvirtual

◆ unzip_body()

http_aclient& acl::http_aclient::unzip_body ( bool  on)

针对 HTTP 协议的响应数据是否自动进行解压

参数
on{bool}
返回
{http_aclient&}

◆ ws_handshake() [1/2]

void acl::http_aclient::ws_handshake ( const void *  key,
size_t  len 
)

与服务器进行 WEBSOCKET 握手

参数
key{const void*} 设置的 key 值
len{size_t} key 值的长度

◆ ws_handshake() [2/2]

void acl::http_aclient::ws_handshake ( const char *  key = "123456789xxx")

◆ ws_handshake_before()

virtual void acl::http_aclient::ws_handshake_before ( http_header reqhdr)
inlinevirtual

当调用 ws_handshake() 时,内部会填充与 websocket 相关的请求头信息, 同时通过此回调告之调用者最终发给 websocket 服务器完整的请求头信息

在文件 http_aclient.hpp315 行定义.

316  {
317  (void) reqhdr;
318  }

◆ ws_read_wait()

void acl::http_aclient::ws_read_wait ( int  timeout = 0)

开始异步读 websocket 数据

参数
timeout{int} 读超时时间,如果该值 <= 0,则不设读超时时间, 否则当读超时时,超时回调方法便会被调用; 注意: 该值与 open() 中的 rw_timeout 有所不同,open() 方法中的读超时仅限 定标准 HTTP IO 过程及 SSL 握手过程的读超时,而此处的读超时则用来 限制与 websocket 相关的读超时,这主要是考虑到 websocket 应用很多 都是长连接场景

◆ ws_send_binary()

bool acl::http_aclient::ws_send_binary ( void *  data,
size_t  len 
)

异步发送一个 FRAME_BINARY 类型的数据帧

参数
data{void*} 内部可能因添加掩码原因被改变内容
len{size_t} data 数据长度
返回
{bool}

◆ ws_send_ping()

bool acl::http_aclient::ws_send_ping ( void *  data,
size_t  len 
)

异步发送一个 FRAME_PING 类型的数据帧

参数
data{void*} 内部可能因添加掩码原因被改变内容
len{size_t} data 数据长度
返回
{bool}

◆ ws_send_pong()

bool acl::http_aclient::ws_send_pong ( void *  data,
size_t  len 
)

异步发送一个 FRAME_PONG 类型的数据帧

参数
data{void*} 内部可能因添加掩码原因被改变内容
len{size_t} data 数据长度
返回
{bool}

◆ ws_send_text()

bool acl::http_aclient::ws_send_text ( char *  data,
size_t  len 
)

异步发送一个 FRAME_TEXT 类型的数据帧

参数
data{char*} 内部可能因添加掩码原因被改变内容
len{size_t} data 数据长度
返回
{bool}

类成员变量说明

◆ buff_

string* acl::http_aclient::buff_
protected

在文件 http_aclient.hpp396 行定义.

◆ conn_

aio_socket_stream* acl::http_aclient::conn_
protected

在文件 http_aclient.hpp389 行定义.

◆ gzip_header_left_

int acl::http_aclient::gzip_header_left_
protected

在文件 http_aclient.hpp383 行定义.

◆ handle_

aio_handle& acl::http_aclient::handle_
protected

在文件 http_aclient.hpp386 行定义.

◆ hdr_res_

HTTP_HDR_RES* acl::http_aclient::hdr_res_
protected

在文件 http_aclient.hpp392 行定义.

◆ header_

http_header* acl::http_aclient::header_
protected

在文件 http_aclient.hpp391 行定义.

◆ http_res_

HTTP_RES* acl::http_aclient::http_res_
protected

在文件 http_aclient.hpp393 行定义.

◆ keep_alive_

bool acl::http_aclient::keep_alive_
protected

在文件 http_aclient.hpp384 行定义.

◆ ns_addr_

struct sockaddr_storage acl::http_aclient::ns_addr_
protected

在文件 http_aclient.hpp398 行定义.

◆ rw_timeout_

int acl::http_aclient::rw_timeout_
protected

在文件 http_aclient.hpp382 行定义.

◆ serv_addr_

struct sockaddr_storage acl::http_aclient::serv_addr_
protected

在文件 http_aclient.hpp399 行定义.

◆ ssl_conf_

sslbase_conf* acl::http_aclient::ssl_conf_
protected

在文件 http_aclient.hpp387 行定义.

◆ ssl_enable_

bool acl::http_aclient::ssl_enable_
protected

在文件 http_aclient.hpp388 行定义.

◆ status_

unsigned acl::http_aclient::status_
protected

在文件 http_aclient.hpp381 行定义.

◆ stream_

socket_stream* acl::http_aclient::stream_
protected

在文件 http_aclient.hpp390 行定义.

◆ unzip_

bool acl::http_aclient::unzip_
protected

在文件 http_aclient.hpp385 行定义.

◆ ws_in_

websocket* acl::http_aclient::ws_in_
protected

在文件 http_aclient.hpp394 行定义.

◆ ws_out_

websocket* acl::http_aclient::ws_out_
protected

在文件 http_aclient.hpp395 行定义.

◆ zstream_

zlib_stream* acl::http_aclient::zstream_
protected

在文件 http_aclient.hpp397 行定义.


该类的文档由以下文件生成: