acl
3.5.3.0
|
#include <http_aclient.hpp>
Public 成员函数 | |
http_aclient (aio_handle &handle, sslbase_conf *ssl_conf=NULL) | |
virtual | ~http_aclient (void) |
virtual void | destroy (void)=0 |
http_header & | request_header (void) |
http_aclient & | unzip_body (bool on) |
bool | is_unzip_body (void) const |
http_aclient & | set_ssl_conf (sslbase_conf *ssl_conf) |
sslbase_conf * | get_ssl_conf (void) const |
http_aclient & | enable_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_stream * | get_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_handle & | handle_ |
sslbase_conf * | ssl_conf_ |
bool | ssl_enable_ |
aio_socket_stream * | conn_ |
socket_stream * | stream_ |
http_header * | header_ |
HTTP_HDR_RES * | hdr_res_ |
HTTP_RES * | http_res_ |
websocket * | ws_in_ |
websocket * | ws_out_ |
string * | buff_ |
zlib_stream * | zstream_ |
struct sockaddr_storage | ns_addr_ |
struct sockaddr_storage | serv_addr_ |
HTTP 客户端异步通信类,不仅支持标准 HTTP 通信协议,而且支持 Websocket 通信, 对于 HTTP 协议及 Websocket 通信均支持 SSL 加密传输; 另外,对于 HTTP 协议,根据用户设置,可以自动解压 GZIP 响应数据,这样在回调 方法 on_http_res_body() 中收到的便是解压后的明文数据。
在文件 http_aclient.hpp 第 34 行定义.
acl::http_aclient::http_aclient | ( | aio_handle & | handle, |
sslbase_conf * | ssl_conf = NULL |
||
) |
构造函数
handle | {aio_handle&} 异步通信事件引擎句柄 |
ssl_conf | {sslbase_conf*} 非 NULL 时自动采用 SSL 通信方式 |
|
virtual |
void acl::http_aclient::close | ( | void | ) |
异步关闭连接
|
protectedvirtual |
重载 acl::aio_callback .
|
pure virtual |
当对象销毁时的回调方法,子类必须实现
http_aclient& acl::http_aclient::enable_ssl | ( | bool | yes | ) |
当构造函数中 ssl_conf 参数非空时,可以调用此方法来设置是否启用 SSL 功能,如果 ssl_conf 非空,则内部 ssl_enable_ 缺省值为 true,可以通 过本方法关闭或开启 ssl 功能
yes | {bool} |
|
inline |
bool acl::http_aclient::get_ns_addr | ( | string & | out | ) | const |
获得本次连接(无论成功或失败)所使用的 DNS 服务地址
out | {string&} 存储结果 |
bool acl::http_aclient::get_server_addr | ( | string & | out | ) | const |
当连接成功、连接失败或连接超时时可调用此方法获得当前所连接用的应用服务器地址
out | {string&} 存储结果 |
|
inline |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
protected |
|
inline |
|
inline |
|
protectedpure virtual |
当连接成功后的回调方法,子类必须实现,子类应在该方法里构造 HTTP 请求 并调用 send_request 方法向 WEB 服务器发送 HTTP 请求
|
inlineprotectedvirtual |
|
inlineprotectedvirtual |
|
inlineprotectedvirtual |
|
inlineprotectedvirtual |
当接收到 WEB 服务端的响应体时的回调方法,该方法可能会被多次回调 直到响应数据读完或出错
data | {char*} 读到的部分数据体内容 |
dlen | {size_t} 本次读到的 data 数据的长度 |
在文件 http_aclient.hpp 第 203 行定义.
|
inlineprotectedvirtual |
当读完 HTTP 响应体或出错后的回调方法
success | {bool} 是否成功读完 HTTP 响应体数据 |
在文件 http_aclient.hpp 第 215 行定义.
|
inlineprotectedvirtual |
当接收到 WEB 服务端的响应头时的回调方法
header | {const http_header&} |
在文件 http_aclient.hpp 第 190 行定义.
|
inlineprotectedvirtual |
|
inlineprotectedvirtual |
当网络读超时时的回调方法
在文件 http_aclient.hpp 第 177 行定义.
|
inlineprotectedvirtual |
|
inlineprotectedvirtual |
|
inlineprotectedvirtual |
在 websocket 通信方式,当读到数据体时的回调方法
data | {char*} 读到的数据地址 |
dlen | {size_t} 读到的数据长度 |
在文件 http_aclient.hpp 第 261 行定义.
|
inlineprotectedvirtual |
|
inlineprotectedvirtual |
当收到 ping 数据包时的回调方法,当该回调方法返回后,如果用户没有将 data 数据清理,则内部会自动给对端写入 pong 信息,如果用户将 data 缓 冲区清理掉,则该方法返回后不会给对接发 pong 信息
data | {string&} 读到的数据 |
在文件 http_aclient.hpp 第 280 行定义.
|
inlineprotectedvirtual |
|
inlineprotectedvirtual |
|
inlineprotectedvirtual |
当 websocket 握手成功后的回调方法
在文件 http_aclient.hpp 第 225 行定义.
|
inlineprotectedvirtual |
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 读写超时时间(秒) |
|
inlineprotectedvirtual |
|
protectedvirtual |
重载 acl::aio_callback .
|
protectedvirtual |
重载 acl::aio_callback .
http_header& acl::http_aclient::request_header | ( | void | ) |
获得 HTTP 请求头,以便于应用添加 HTTP 请求头中的字段内容
|
protected |
|
protected |
|
protected |
|
protected |
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 时表示数据体的长度 |
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功能 |
|
protectedvirtual |
重载 acl::aio_callback .
http_aclient& acl::http_aclient::unzip_body | ( | bool | on | ) |
void acl::http_aclient::ws_handshake | ( | const void * | key, |
size_t | len | ||
) |
与服务器进行 WEBSOCKET 握手
key | {const void*} 设置的 key 值 |
len | {size_t} key 值的长度 |
void acl::http_aclient::ws_handshake | ( | const char * | key = "123456789xxx" | ) |
|
inlinevirtual |
当调用 ws_handshake() 时,内部会填充与 websocket 相关的请求头信息, 同时通过此回调告之调用者最终发给 websocket 服务器完整的请求头信息
在文件 http_aclient.hpp 第 315 行定义.
void acl::http_aclient::ws_read_wait | ( | int | timeout = 0 | ) |
开始异步读 websocket 数据
timeout | {int} 读超时时间,如果该值 <= 0,则不设读超时时间, 否则当读超时时,超时回调方法便会被调用; 注意: 该值与 open() 中的 rw_timeout 有所不同,open() 方法中的读超时仅限 定标准 HTTP IO 过程及 SSL 握手过程的读超时,而此处的读超时则用来 限制与 websocket 相关的读超时,这主要是考虑到 websocket 应用很多 都是长连接场景 |
bool acl::http_aclient::ws_send_binary | ( | void * | data, |
size_t | len | ||
) |
异步发送一个 FRAME_BINARY 类型的数据帧
data | {void*} 内部可能因添加掩码原因被改变内容 |
len | {size_t} data 数据长度 |
bool acl::http_aclient::ws_send_ping | ( | void * | data, |
size_t | len | ||
) |
异步发送一个 FRAME_PING 类型的数据帧
data | {void*} 内部可能因添加掩码原因被改变内容 |
len | {size_t} data 数据长度 |
bool acl::http_aclient::ws_send_pong | ( | void * | data, |
size_t | len | ||
) |
异步发送一个 FRAME_PONG 类型的数据帧
data | {void*} 内部可能因添加掩码原因被改变内容 |
len | {size_t} data 数据长度 |
bool acl::http_aclient::ws_send_text | ( | char * | data, |
size_t | len | ||
) |
异步发送一个 FRAME_TEXT 类型的数据帧
data | {char*} 内部可能因添加掩码原因被改变内容 |
len | {size_t} data 数据长度 |
|
protected |
在文件 http_aclient.hpp 第 396 行定义.
|
protected |
在文件 http_aclient.hpp 第 389 行定义.
|
protected |
在文件 http_aclient.hpp 第 383 行定义.
|
protected |
在文件 http_aclient.hpp 第 386 行定义.
|
protected |
在文件 http_aclient.hpp 第 392 行定义.
|
protected |
在文件 http_aclient.hpp 第 391 行定义.
|
protected |
在文件 http_aclient.hpp 第 393 行定义.
|
protected |
在文件 http_aclient.hpp 第 384 行定义.
|
protected |
在文件 http_aclient.hpp 第 398 行定义.
|
protected |
在文件 http_aclient.hpp 第 382 行定义.
|
protected |
在文件 http_aclient.hpp 第 399 行定义.
|
protected |
在文件 http_aclient.hpp 第 387 行定义.
|
protected |
在文件 http_aclient.hpp 第 388 行定义.
|
protected |
在文件 http_aclient.hpp 第 381 行定义.
|
protected |
在文件 http_aclient.hpp 第 390 行定义.
|
protected |
在文件 http_aclient.hpp 第 385 行定义.
|
protected |
在文件 http_aclient.hpp 第 394 行定义.
|
protected |
在文件 http_aclient.hpp 第 395 行定义.
|
protected |
在文件 http_aclient.hpp 第 397 行定义.