acl  3.5.3.0
lib_http.h 文件参考
#include "lib_http_status.h"
#include "lib_http_struct.h"
+ lib_http.h 的引用(Include)关系图:
+ 此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

宏定义

#define http_req_body_get_sync2   http_req_body_get_sync
 
#define http_res_body_get_sync2   http_res_body_get_sync
 
#define HTTP_CHAT_SYNC_CTL_END   0
 
#define HTTP_CHAT_CTL_BUFF_ONOFF   1
 

函数

HTTP_API HTTP_HDRhttp_hdr_new (size_t size)
 
HTTP_API void http_hdr_clone (const HTTP_HDR *src, HTTP_HDR *dst)
 
HTTP_API void http_hdr_free (HTTP_HDR *hh)
 
HTTP_API void http_hdr_reset (HTTP_HDR *hh)
 
HTTP_API void http_hdr_append_entry (HTTP_HDR *hh, HTTP_HDR_ENTRY *entry)
 
HTTP_API int http_hdr_parse_version (HTTP_HDR *hh, const char *data)
 
HTTP_API int http_hdr_parse (HTTP_HDR *hh)
 
HTTP_API HTTP_HDR_ENTRYhttp_hdr_entry_build (const char *name, const char *value)
 
HTTP_API HTTP_HDR_ENTRYhttp_hdr_entry_new (const char *data)
 
HTTP_API HTTP_HDR_ENTRYhttp_hdr_entry_head (char *data)
 
HTTP_API HTTP_HDR_ENTRYhttp_hdr_entry_new2 (char *data)
 
HTTP_API HTTP_HDR_ENTRYhttp_hdr_entry (const HTTP_HDR *hh, const char *name)
 
HTTP_API char * http_hdr_entry_value (const HTTP_HDR *hh, const char *name)
 
HTTP_API int http_hdr_entry_replace (HTTP_HDR *hh, const char *name, const char *value, int force)
 
HTTP_API int http_hdr_entry_replace2 (HTTP_HDR *hh, const char *name, const char *from, const char *to, int ignore_case)
 
HTTP_API void http_hdr_entry_off (HTTP_HDR *hh, const char *name)
 
HTTP_API void http_hdr_print (const HTTP_HDR *hh, const char *msg)
 
HTTP_API void http_hdr_fprint (ACL_VSTREAM *fp, const HTTP_HDR *hh, const char *msg)
 
HTTP_API void http_hdr_sprint (ACL_VSTRING *bf, const HTTP_HDR *hh, const char *msg)
 
HTTP_API void http_uri_correct (int onoff)
 
HTTP_API HTTP_HDR_REQhttp_hdr_req_new (void)
 
HTTP_API HTTP_HDR_REQhttp_hdr_req_create (const char *url, const char *method, const char *version)
 
HTTP_API HTTP_HDR_REQhttp_hdr_req_clone (const HTTP_HDR_REQ *hdr_req)
 
HTTP_API HTTP_HDR_REQhttp_hdr_req_rewrite (const HTTP_HDR_REQ *hh, const char *url)
 
HTTP_API int http_hdr_req_rewrite2 (HTTP_HDR_REQ *hh, const char *url)
 
HTTP_API void http_hdr_req_free (HTTP_HDR_REQ *hh)
 
HTTP_API void http_hdr_req_reset (HTTP_HDR_REQ *hh)
 
HTTP_API int http_hdr_req_cookies_parse (HTTP_HDR_REQ *hh)
 
HTTP_API int http_hdr_req_line_parse (HTTP_HDR_REQ *hh)
 
HTTP_API int http_hdr_req_parse (HTTP_HDR_REQ *hh)
 
HTTP_API int http_hdr_req_parse3 (HTTP_HDR_REQ *hh, int parse_params, int parse_cookie)
 
HTTP_API const char * http_hdr_req_cookie_get (HTTP_HDR_REQ *hh, const char *name)
 
HTTP_API const char * http_hdr_req_method (const HTTP_HDR_REQ *hh)
 
HTTP_API const char * http_hdr_req_param (const HTTP_HDR_REQ *hh, const char *name)
 
HTTP_API const char * http_hdr_req_url_part (const HTTP_HDR_REQ *hh)
 
HTTP_API const char * http_hdr_req_url_path (const HTTP_HDR_REQ *hh)
 
HTTP_API const char * http_hdr_req_host (const HTTP_HDR_REQ *hh)
 
HTTP_API const char * http_hdr_req_url (const HTTP_HDR_REQ *hh)
 
HTTP_API int http_hdr_req_range (const HTTP_HDR_REQ *hdr_req, http_off_t *range_from, http_off_t *range_to)
 
HTTP_API int http_hdr_res_status_parse (HTTP_HDR_RES *hh, const char *dbuf)
 
HTTP_API HTTP_HDR_REShttp_hdr_res_new (void)
 
HTTP_API HTTP_HDR_REShttp_hdr_res_clone (const HTTP_HDR_RES *hdr_res)
 
HTTP_API void http_hdr_res_free (HTTP_HDR_RES *hh)
 
HTTP_API void http_hdr_res_reset (HTTP_HDR_RES *hh)
 
HTTP_API int http_hdr_res_parse (HTTP_HDR_RES *hdr_res)
 
HTTP_API int http_hdr_res_range (const HTTP_HDR_RES *hdr_res, http_off_t *range_from, http_off_t *range_to, http_off_t *total_length)
 
HTTP_API const char * http_mkrfc1123 (char *buf, size_t size, time_t t)
 
HTTP_API void http_hdr_req_get_async (HTTP_HDR_REQ *hdr, ACL_ASTREAM *astream, HTTP_HDR_NOTIFY notify, void *arg, int timeout)
 
HTTP_API void http_hdr_res_get_async (HTTP_HDR_RES *hdr, ACL_ASTREAM *astream, HTTP_HDR_NOTIFY notify, void *arg, int timeout)
 
HTTP_API void http_req_body_get_async (HTTP_REQ *request, ACL_ASTREAM *astream, HTTP_BODY_NOTIFY notify, void *arg, int timeout)
 
HTTP_API void http_res_body_get_async (HTTP_RES *respond, ACL_ASTREAM *astream, HTTP_BODY_NOTIFY notify, void *arg, int timeout)
 
HTTP_API int http_hdr_req_get_sync (HTTP_HDR_REQ *hdr, ACL_VSTREAM *stream, int timeout)
 
HTTP_API int http_hdr_res_get_sync (HTTP_HDR_RES *hdr, ACL_VSTREAM *stream, int timeout)
 
HTTP_API http_off_t http_req_body_get_sync (HTTP_REQ *request, ACL_VSTREAM *stream, void *buf, int size)
 
HTTP_API http_off_t http_res_body_get_sync (HTTP_RES *respond, ACL_VSTREAM *stream, void *buf, int size)
 
HTTP_API void http_chat_sync_reqctl (HTTP_REQ *request, int name,...)
 
HTTP_API void http_chat_sync_resctl (HTTP_RES *respond, int name,...)
 
HTTP_API HTTP_REQhttp_req_new (HTTP_HDR_REQ *hdr_req)
 
HTTP_API void http_req_free (HTTP_REQ *request)
 
HTTP_API HTTP_REShttp_res_new (HTTP_HDR_RES *hdr_res)
 
HTTP_API void http_res_free (HTTP_RES *respond)
 
HTTP_API void http_hdr_put_str (HTTP_HDR *hdr, const char *name, const char *value)
 
HTTP_API void http_hdr_put_int (HTTP_HDR *hdr, const char *name, int value)
 
HTTP_API void __attribute__ ((format(printf, 3, 4))) http_hdr_put_fmt(HTTP_HDR *hdr
 
HTTP_API void const char const char HTTP_API void http_hdr_put_time (HTTP_HDR *hdr, const char *name, time_t t)
 
HTTP_API int http_hdr_set_keepalive (const HTTP_HDR_REQ *req, HTTP_HDR_RES *res)
 
HTTP_API void http_hdr_res_init (HTTP_HDR_RES *hdr_res, int status)
 
HTTP_API HTTP_HDR_REShttp_hdr_res_static (int status)
 
HTTP_API HTTP_HDR_REShttp_hdr_res_error (int status)
 
HTTP_API void http_hdr_build (const HTTP_HDR *hdr, ACL_VSTRING *strbuf)
 
HTTP_API void http_hdr_build_request (const HTTP_HDR_REQ *hdr_req, ACL_VSTRING *strbuf)
 
HTTP_API const char * http_status_line (int status)
 
HTTP_API void http_tmpl_load (const char *tmpl_path)
 
HTTP_API const ACL_VSTRINGhttp_tmpl_get (int status)
 
HTTP_API const char * http_tmpl_title (int status)
 
HTTP_API int http_tmpl_size (int status)
 
HTTP_API void http_init (const char *tmpl_path)
 
HTTP_API void http_hdr_cache (int max)
 
HTTP_API void http_buf_size_set (http_off_t size)
 
HTTP_API http_off_t http_buf_size_get (void)
 

变量

HTTP_API void const char * name
 
HTTP_API void const char const char * fmt
 

宏定义说明

◆ HTTP_CHAT_CTL_BUFF_ONOFF

#define HTTP_CHAT_CTL_BUFF_ONOFF   1

是否打开数据接收时的预缓冲策略

在文件 lib_http.h557 行定义.

◆ HTTP_CHAT_SYNC_CTL_END

#define HTTP_CHAT_SYNC_CTL_END   0

结束标志位

在文件 lib_http.h556 行定义.

◆ http_req_body_get_sync2

#define http_req_body_get_sync2   http_req_body_get_sync

在文件 lib_http.h524 行定义.

◆ http_res_body_get_sync2

#define http_res_body_get_sync2   http_res_body_get_sync

在文件 lib_http.h539 行定义.

函数说明

◆ __attribute__()

HTTP_API void __attribute__ ( (format(printf, 3, 4))  )

向通用HTTP头中添加数据

参数
hdr{HTTP_HDR*} 通用HTTP头对象
name{const char*} 变量名,如 Accept-Encoding: deflate, gzip 中的 Accept-Encoding
fmt{const char*} 变参格式字符串
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_buf_size_get()

HTTP_API http_off_t http_buf_size_get ( void  )

获得进行 HTTP 协议体数据传输时的缓冲区大小

返回
{http_off_t} 缓冲区大小
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_buf_size_set()

HTTP_API void http_buf_size_set ( http_off_t  size)

设置在进行 HTTP 协议体数据传输时的缓冲区大小

参数
size{http_off_t} 缓冲区大小
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_chat_sync_reqctl()

HTTP_API void http_chat_sync_reqctl ( HTTP_REQ request,
int  name,
  ... 
)

设置请求协议的控制标志位

参数
request{HTTP_REQ*} HTTP请求体类型指针, 不能为空, 且 request->hdr 为空
name{int} 第一个标志位,当最后一个标志位为 HTTP_CHAT_SYNC_CTL_END 时 表示结束
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_chat_sync_resctl()

HTTP_API void http_chat_sync_resctl ( HTTP_RES respond,
int  name,
  ... 
)

设置响应协议的控制标志位

参数
respond{HTTP_RES*} HTTP响应体类型指针, 不能为空, 且 respond->hdr 为空
name{int} 第一个标志位,当最后一个标志位为 HTTP_CHAT_SYNC_CTL_END 时 表示结束
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_append_entry()

HTTP_API void http_hdr_append_entry ( HTTP_HDR hh,
HTTP_HDR_ENTRY entry 
)

HTTP_HDR 头中增加一个条目

参数
hh{HTTP_HDR*} 通用头类型的数据指针,不能为空
entry{HTTP_HDR_ENTRY*} HTTP头条目结构指针, 不能为空
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_build()

HTTP_API void http_hdr_build ( const HTTP_HDR hdr,
ACL_VSTRING strbuf 
)

根据HTTP通用头生成头的完整内容于BUF中

参数
hdr{const HTTP_HDR*} 通用HTTP头
strbuf{ACL_VSTRING*} 存储结果的缓冲区
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_build_request()

HTTP_API void http_hdr_build_request ( const HTTP_HDR_REQ hdr_req,
ACL_VSTRING strbuf 
)

根据HTTP请求头生成请求头内容于BUF中

参数
hdr_req{const HTTP_HDR_REQ*} HTTP请求头
strbuf{ACL_VSTRING*} 存储结果的缓冲区
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_cache()

HTTP_API void http_hdr_cache ( int  max)

是否自动缓冲被释放的 HTTP 头对象,从而使其内存可以重复使用, 该函数在程序初始化 时只能被调用一次

参数
max{int} 当该值 > 0 时便自动启用 HTTP 头对象缓冲功能
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_clone()

HTTP_API void http_hdr_clone ( const HTTP_HDR src,
HTTP_HDR dst 
)

从源HTTP通用头拷贝内部成员变量至一个新的HTTP通用头结构中

参数
src{const HTTP_HDR*} 源HTTP通用头对象,不能为空
dst{HTTP_HDR*} 目的HTTP通用头对象,不能为空
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_entry()

HTTP_API HTTP_HDR_ENTRY* http_hdr_entry ( const HTTP_HDR hh,
const char *  name 
)

获取一个 HTTP_HDR_ENTRY 条目

参数
hh{HTTP_HDR*} 通用HTTP头类型的数据指针,不能为空
name{const char*} 该 HTTP_HDR_ENTRY 条目的标识名, 不能为空. 如: Content-Length.
返回
ret {HTTP_HDR_ENTRY *} ret != NULL: ok; ret == NULL: 出错或不存在.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_entry_build()

HTTP_API HTTP_HDR_ENTRY* http_hdr_entry_build ( const char *  name,
const char *  value 
)

由传入的 name, value 对产生一个 HTTP_HDR_ENTRY 对象

参数
name{const char*} 变量名
value{const char*} 变量值
返回
{HTTP_HDR_ENTRY*} 如果为空则是因为输入参数有误
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_entry_head()

◆ http_hdr_entry_new()

HTTP_API HTTP_HDR_ENTRY* http_hdr_entry_new ( const char *  data)

根据传入的一行数据进行分析, 生成一个 HTTP_HDR_ENTRY

参数
data{const char*} HTTP 协议头中的一行数据, 如: Content-Length: 200
返回
{HTTP_HDR_ENTRY*} !NULL: ok; NULL: err.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_entry_new2()

◆ http_hdr_entry_off()

HTTP_API void http_hdr_entry_off ( HTTP_HDR hh,
const char *  name 
)

禁止HTTP协议头中的某项

参数
hh{HTTP_HDR* } 通用HTTP头类型的数据指针,不能为空
name{const char*} 该 HTTP_HDR_ENTRY 条目的标识名, 不能为空. 如: Content-Length
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_entry_replace()

HTTP_API int http_hdr_entry_replace ( HTTP_HDR hh,
const char *  name,
const char *  value,
int  force 
)

将 HTTP 头中的某个字段进行替换, 该功能起初主要是为了实现 keep-alive 字段的替换

参数
hh{HTTP_HDR*} 通用HTTP头类型的数据指针,不能为空
name{const char*} 该 HTTP_HDR_ENTRY 条目的标识名, 不能为空. 如: Content-Length
value{const char*} 该 name 字段所对应的新的值
force{int} 如果所替换的字段在原始HTTP请求里不存在, 则强行产生新的 entry 字段并 填至该请求头, 当该值为非0值时进行强行添加, 否则若该name在请求里不存在则不添加.
返回
{int} 0 表示替换成功; < 0 表示输入参数出错或该 name 字段在该HTTP请求头里不存在
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_entry_replace2()

HTTP_API int http_hdr_entry_replace2 ( HTTP_HDR hh,
const char *  name,
const char *  from,
const char *  to,
int  ignore_case 
)

将 HTTP 头中的某个字段中包含某个字符串的源字符串进行替换, 可以支持多次匹配替换

参数
hh{HTTP_HDR*} 通用HTTP头类型的数据指针,不能为空
name{const char*} 该 HTTP_HDR_ENTRY 条目的标识名, 不能为空. 如: Cookie
from{const char*} 替换时的源字符串
to{const char*} 替换时的目标字符串
ignore_case{int} 在查找替换时是否忽略源字符串的大小写
返回
{int} 0: 表示未做任何替换, > 0: 表示替换的次数
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_entry_value()

HTTP_API char* http_hdr_entry_value ( const HTTP_HDR hh,
const char *  name 
)

获取HTTP协议头里某个实体头的变量值,如某个实体头为:Host: www.test.com 要获得 Host 变量的值,调用该函数后便可以取得 www.test.com

参数
hh{HTTP_HDR*} 通用HTTP头类型的数据指针,不能为空
name{const char*} 该 HTTP_HDR_ENTRY 条目的标识名, 不能为空. 如: Content-Length
返回
ret {char*} ret != NULL: ok; ret == NULL: 出错或不存在.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_fprint()

HTTP_API void http_hdr_fprint ( ACL_VSTREAM fp,
const HTTP_HDR hh,
const char *  msg 
)

调试输出HTTP协议头部数据,调试类接口

参数
fp{ACL_VSTREAM*} 某个流指针,输出结果将会定向至该数据流(可以为网络流或文件流)
hh{HTTP_HDR*} 通用HTTP头类型的数据指针,不能为空
msg{const char*} 用户希望与头部信息一起输出的自定义信息, 可以为空
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_free()

HTTP_API void http_hdr_free ( HTTP_HDR hh)

释放一个HTTP_HDR结构内存

参数
hh{HTTP_HDR*} 类型的数据指针,不能为空
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_new()

HTTP_API HTTP_HDR* http_hdr_new ( size_t  size)

生成一个通用HTTP协议头的结构对象

参数
size{size_t} 所需分配内存大小, 等于 HTTP_HDR_REQHTTP_HDR_RES 的尺寸
返回
{HTTP_HDR*} !NULL: 返回一个HTTP_HDR结构指针; NULL: 出错.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_parse()

HTTP_API int http_hdr_parse ( HTTP_HDR hh)

分析所有的通用HTTP协议头并存储在 hh 结构中

参数
hh{HTTP_HDR*} 通用HTTP头类型的数据指针,不能为空
返回
{int} 0: ok; < 0: error
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_parse_version()

HTTP_API int http_hdr_parse_version ( HTTP_HDR hh,
const char *  data 
)

分析所给数据, 解析出协议, 主/次版本号,并将结果存在通用HTTP头结构内

参数
hh{HTTP_HDR*} 类型的数据指针,不能为空
data{const char*} 数据格式须为: HTTP/1.0
返回
{int} 0: OK; < 0: error.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_print()

HTTP_API void http_hdr_print ( const HTTP_HDR hh,
const char *  msg 
)

调试输出HTTP协议头部数据,调试类接口

参数
hh{HTTP_HDR*} 通用HTTP头类型的数据指针,不能为空
msg{const char*} 用户希望与头部信息一起输出的自定义信息, 可以为空
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_put_int()

HTTP_API void http_hdr_put_int ( HTTP_HDR hdr,
const char *  name,
int  value 
)

向通用HTTP头中添加数据

参数
hdr{HTTP_HDR*} 通用HTTP头对象
name{const char*} 变量名,如 Content-Length: 1024 中的 Conteng-Length
value{const int} 变量值,如 Content-Length: 1024 中的 1024
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_put_str()

HTTP_API void http_hdr_put_str ( HTTP_HDR hdr,
const char *  name,
const char *  value 
)

向通用HTTP头中添加数据

参数
hdr{HTTP_HDR*} 通用HTTP头对象
name{const char*} 变量名,如 Accept-Encoding: deflate, gzip 中的 Accept-Encoding
value{const char*} 变量值,如 Accept-Encoding: deflate, gzip 中的 deflate, gzip
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_put_time()

HTTP_API void const char const char HTTP_API void http_hdr_put_time ( HTTP_HDR hdr,
const char *  name,
time_t  t 
)

向通用HTTP头中添加时间数据

参数
hdr{HTTP_HDR*} 通用HTTP头对象
name{const char*} 变量名
t{time_t} 时间值
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_clone()

HTTP_API HTTP_HDR_REQ* http_hdr_req_clone ( const HTTP_HDR_REQ hdr_req)

克隆一个HTTP请求头对象,但不复制其中的 chat_ctx, chat_free_ctx_fn 两个成员变量

参数
hdr_req{const HTTP_HDR_REQ*} HTTP请求头对象
返回
{HTTP_HDR_REQ*} 克隆的HTTP请求头对象
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_cookie_get()

HTTP_API const char* http_hdr_req_cookie_get ( HTTP_HDR_REQ hh,
const char *  name 
)

从HTTP请求头中获得某个cookie值

参数
hh{HTTP_HDR_REQ*) HTTP请求头类型的数据指针,不能为空
name{const char*} 某个cookie的变量名, 不能为空
返回
{const char*} !NULL: 该返回值即为所要求的cookie; NULL: 出错或所要求的cookie不存在
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_cookies_parse()

HTTP_API int http_hdr_req_cookies_parse ( HTTP_HDR_REQ hh)

分析HTTP协议头的cookies

参数
hh{HTTP_HDR_REQ*} HTTP请求头类型的数据指针,不能为空
返回
{int} 0: ok; -1: err.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_create()

HTTP_API HTTP_HDR_REQ* http_hdr_req_create ( const char *  url,
const char *  method,
const char *  version 
)

根据请求的URL,请求的方法,HTTP版本创建一个HTTP请求头对象

参数
url{const char*} 请求的URL,必须是完整的URL,如: http://www.test.com/path/proc?name=value http://www.test.com/path/proc http://www.test.com/
method{const char*} HTTP请求方法,必须为如下之一: GET, POST, CONNECT, HEAD, 且要注意必须都为大写
version{const char *} HTTP版本,必须为如下之一: HTTP/1.0, HTTP/1.1
返回
{HTTP_HDR_REQ*} HTTP请求头对象
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_free()

HTTP_API void http_hdr_req_free ( HTTP_HDR_REQ hh)

释放HTTP请求头对象

参数
hh{HTTP_HDR_REQ*} HTTP请求头对象
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_get_async()

HTTP_API void http_hdr_req_get_async ( HTTP_HDR_REQ hdr,
ACL_ASTREAM astream,
HTTP_HDR_NOTIFY  notify,
void *  arg,
int  timeout 
)

异步获取一个HTTP REQUEST协议头,数据结果存储在hdr中, 当取得一个完整的HTTP头或 出错时调用用户的注册函数 notify

参数
hdr{HTTP_HDR_REQ*} HTTP请求头类型结构指针,不能为空
astream{ACL_ASTREAM*} 与客户端连接的数据流, 不能为空
notify{HTTP_HDR_NOTIFY} 当HTTP协议头读完或出错时调用的用户的注册函数
arg{void*} notify 调用时的一个参数
timeout{int} 接收数据过程中的读超时时间
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_get_sync()

HTTP_API int http_hdr_req_get_sync ( HTTP_HDR_REQ hdr,
ACL_VSTREAM stream,
int  timeout 
)

同步获取一个HTTP REQUEST协议头,数据结果存储在hdr中, 当取得一个完整的HTTP头或 出错时调用用户的注册函数 notify

参数
hdr{HTTP_HDR_REQ*} HTTP请求头类型结构指针,不能为空
stream{ACL_VSTREAM*} 与客户端连接的数据流, 不能为空
timeout{int} 接收数据过程中的读超时时间
返回
{int} 0: 成功; < 0: 失败
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_host()

HTTP_API const char* http_hdr_req_host ( const HTTP_HDR_REQ hh)

从HTTP请求协议头中获得服务器的主机IP或域名,格式为:IP|domain[:PORT] 如: 192.168.0.22:80, or www.test.com:8088

参数
hh{const HTTP_HDR_REQ*} HTTP请求头类型的数据指针,不能为空
返回
{const char*} 返回用户请示的主机名. !NULL: ok; NULL: error.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_line_parse()

HTTP_API int http_hdr_req_line_parse ( HTTP_HDR_REQ hh)

分析HTTP请求首行数据(如: GET /cgi-bin/test.cgi?name=value&name2=value2 HTTP/1.0) 请求的方法(GET)-->hdr_request_method URL数据分析结果(name=value)-->hdr_request_table HTTP协议版本号(HTTP/1.0)-->hdr_request_proto URL数据中的路径部分(/cgi-bin/test.cgi)-->hdr_request_url

参数
hh{HTTP_HDR_REQ*} HTTP请求头类型的数据指针,不能为空
返回
{int} 0: ok; -1: err.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_method()

HTTP_API const char* http_hdr_req_method ( const HTTP_HDR_REQ hh)

从HTTP请求头中取得HTTP请求的方法, 如: POST, GET, CONNECT

参数
hh{const HTTP_HDR_REQ*} HTTP请求头类型的数据指针,不能为空
返回
{const char*} 返回请示方法. NULL: error; !NULL: OK.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_new()

HTTP_API HTTP_HDR_REQ* http_hdr_req_new ( void  )

分配一个请求的HTTP协议头对象

返回
{HTTP_HDR_REQ*} HTTP请求头对象
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_param()

HTTP_API const char* http_hdr_req_param ( const HTTP_HDR_REQ hh,
const char *  name 
)

从HTTP请求头中获取请求URL中某个请求字段的数据, 如取: /cgi-bin/test.cgi?n1=v1&n2=v2 中的 n2的值v2

参数
hh{const HTTP_HDR_REQ*} HTTP请求头类型的数据指针,不能为空
name{const char*} 请求参数中的变量名
返回
{const char*} !NULL: ok, 返回变量值的内存指针; NULL: 出错,或请求的变量名不存在.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_parse()

HTTP_API int http_hdr_req_parse ( HTTP_HDR_REQ hh)

分析HTTP请求头协议数据, 其内部会调用 http_hdr_req_line_parse, http_hdr_req_cookies_parse

参数
hh{HTTP_HDR_REQ*} HTTP请求头类型的数据指针,不能为空
返回
{int} 0: ok; -1: err.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_parse3()

HTTP_API int http_hdr_req_parse3 ( HTTP_HDR_REQ hh,
int  parse_params,
int  parse_cookie 
)

分析HTTP请求头协议数据, 其内部会调用 http_hdr_req_line_parse, http_hdr_req_cookies_parse 如果 parse_params 非 0 则分析HTTP请求 url 中的参数部分; 如果 parse_cookie 非 0 则分析 HTTP请求中的 cookie 内容

参数
hh{HTTP_HDR_REQ*} HTTP请求头类型的数据指针,不能为空
parse_params{int} 是否分析请求 url 中的参数部分
parse_cookie{int} 是否分析请求中的 cookie 内容
返回
{int} 0: ok; -1: err.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_range()

HTTP_API int http_hdr_req_range ( const HTTP_HDR_REQ hdr_req,
http_off_t range_from,
http_off_t range_to 
)

分析HTTP请求头中的 Range 字段

参数
hdr_req{HTTP_HDR_REQ*} 请求HTTP协议头, 不能为空
range_from{http_off_t*} 存储偏移起始位置
range_to{http_off_t*} 存储偏移结束位置 注: * {range_from}, {range_to} 下标从0开始 请求的 Range 格式: Range: bytes={range_from}-, bytes={range_from}-{range_to}
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_reset()

HTTP_API void http_hdr_req_reset ( HTTP_HDR_REQ hh)

将HTTP请求头对象的成员变量释放并重新初始化

参数
hh{HTTP_HDR_REQ*} HTTP请求头对象
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_rewrite()

HTTP_API HTTP_HDR_REQ* http_hdr_req_rewrite ( const HTTP_HDR_REQ hh,
const char *  url 
)

根据上次HTTP请求头内容及重定向的URL产生一个新的HTTP请求头

参数
hh{const HTTP_HDR_REQ*} 上次的HTTP请求头对象
url{const char *} 重定向的URL,如果有 http[s]:// 前缀,则认为 是完整的URL,新的 Host 字段将由该URL中提取,否则则继承源HTTP请求头中 的 Host 字段
返回
{HTTP_HDR_REQ*} 新产生的重定向的HTTP请求头
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_rewrite2()

HTTP_API int http_hdr_req_rewrite2 ( HTTP_HDR_REQ hh,
const char *  url 
)

根据HTTP请求头内容及重定向的URL重新设置该HTTP请求头的信息

参数
hh{const HTTP_HDR_REQ*} 上次的HTTP请求头对象
url{const char *} 重定向的URL,如果有 http[s]:// 前缀,则认为 是完整的URL,新的 Host 字段将由该URL中提取,否则则继承源HTTP请求头中 的 Host 字段
返回
{int} 0: ok; < 0: error
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_url()

HTTP_API const char* http_hdr_req_url ( const HTTP_HDR_REQ hh)

◆ http_hdr_req_url_part()

HTTP_API const char* http_hdr_req_url_part ( const HTTP_HDR_REQ hh)

从HTTP请求头中获取请求行中的访问路径部分, 不包含主机名但包含参数. 如原请求行数据为: GET /cgi-bin/test.cgi?n1=v1&n2=v2 HTTP/1.1 or GET http://www.test.com[:80]/cgi-bin/test.cgi?n1=v1&n2=v2 HTTP/1.1 则分析后的结果数据为: /cgi-bin/test.cgi?n1=v1&n2=v2

参数
hh{const HTTP_HDR_REQ*} HTTP请求头类型的数据指针,不能为空
返回
{const char*} 请示的URL. !NULL: OK; NULL: error.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_req_url_path()

HTTP_API const char* http_hdr_req_url_path ( const HTTP_HDR_REQ hh)

从HTTP请求头中获取请求行中的访问路径部分, 不包含主机名及参数. 如原请求行数据为: GET /cgi-bin/test.cgi?n1=v1&n2=v2 HTTP/1.1 or GET http://www.test.com[:80]/cgi-bin/test.cgi?n1=v1&n2=v2 HTTP/1.1 则分析后的结果数据为: /cgi-bin/test.cgi

参数
hh{const HTTP_HDR_REQ*} HTTP请求头类型的数据指针,不能为空
返回
{const char*} 请示的URL. !NULL: OK; NULL: error.
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_clone()

HTTP_API HTTP_HDR_RES* http_hdr_res_clone ( const HTTP_HDR_RES hdr_res)

克隆一个HTTP响应头

参数
hdr_res{const HTTP_HDR_RES*} 源HTTP响应头
返回
{HTTP_HDR_RES *} 新产生的HTTP响应头
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_error()

HTTP_API HTTP_HDR_RES* http_hdr_res_error ( int  status)

用返回状态(nxx)生成一个HTTP响应头

参数
status{int} 状态号,nxx(4xx, 5xx)
返回
{HTTP_HDR_RES*} 生成的HTTP响应头
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_free()

HTTP_API void http_hdr_res_free ( HTTP_HDR_RES hh)

释放一个HTTP响应头

参数
hh{HTTP_HDR_RES*} HTTP响应头
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_get_async()

HTTP_API void http_hdr_res_get_async ( HTTP_HDR_RES hdr,
ACL_ASTREAM astream,
HTTP_HDR_NOTIFY  notify,
void *  arg,
int  timeout 
)

异步获取一个HTTP RESPOND协议头,数据结果存储在hdr中, 当取得一个完整的HTTP头或 出错时调用用户的注册函数 notify

参数
hdr{HTTP_HDR_REQ*} HTTP响应头类型结构指针,不能为空
astream{ACL_ASTREAM*} 与服务端连接的数据流, 不能为空
notify{HTTP_HDR_NOTIFY} 当HTTP协议头读完或出错时调用的用户的注册函数
arg{void*} notify 调用时的一个参数
timeout{int} 接收数据过程中的读超时时间
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_get_sync()

HTTP_API int http_hdr_res_get_sync ( HTTP_HDR_RES hdr,
ACL_VSTREAM stream,
int  timeout 
)

同步获取一个HTTP RESPOND协议头,数据结果存储在hdr中, 当取得一个完整的HTTP头或 出错时调用用户的注册函数 notify

参数
hdr{HTTP_HDR_REQ*} HTTP响应头类型结构指针,不能为空
stream{ACL_VSTREAM*} 与服务端连接的数据流, 不能为空
timeout{int} 接收数据过程中的读超时时间
返回
{int} 0: 成功; < 0: 失败
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_init()

HTTP_API void http_hdr_res_init ( HTTP_HDR_RES hdr_res,
int  status 
)

用返回状态(1xx, 2xx, 3xx, 4xx, 5xx) 初始化一个HTTP响应头

参数
hdr_res{HTTP_HDR_RES*} HTTP响应头,存储分析结果
status{int} 状态号,nxx(1xx, 2xx, 3xx, 4xx, 5xx)
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_new()

HTTP_API HTTP_HDR_RES* http_hdr_res_new ( void  )

创建一个新的HTTP响应头

返回
{HTTP_HDR_RES*}
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_parse()

HTTP_API int http_hdr_res_parse ( HTTP_HDR_RES hdr_res)

分析HTTP响应头里的数据,并存储分析结果

参数
hdr_res{HTTP_HDR_RES*} HTTP响应头
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_range()

HTTP_API int http_hdr_res_range ( const HTTP_HDR_RES hdr_res,
http_off_t range_from,
http_off_t range_to,
http_off_t total_length 
)

分析HTTP响应头中的 Range 字段

参数
hdr_res{HTTP_HDR_RES*} 响应HTTP协议头, 不能为空
range_from{http_off_t*} 存储偏移起始位置, 不能为空
range_to{http_off_t*} 存储偏移结束位置, 不能为空
total_length{http_off_t*} 整个数据文件的总长度, 可为空
返回
{int} 返回 0 表示成功,-1 表示失败 注: * {range_from}, {range_to} 下标从0开始 响应的 Range 格式: Content-Range: bytes {range_from}-{range_to}/{total_length}
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_reset()

HTTP_API void http_hdr_res_reset ( HTTP_HDR_RES hh)

向HTTP响应头重新初始化并释放其中的成员变量

参数
hh{HTTP_HDR_RES*} HTTP响应头
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_static()

HTTP_API HTTP_HDR_RES* http_hdr_res_static ( int  status)

用返回状态(nxx)生成一个HTTP响应头

参数
status{int} 状态号,nxx(1xx, 2xx, 3xx, 4xx, 5xx)
返回
{HTTP_HDR_RES*} 生成的HTTP响应头
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_res_status_parse()

HTTP_API int http_hdr_res_status_parse ( HTTP_HDR_RES hh,
const char *  dbuf 
)

分析HTTP响应头中的状态行

参数
hh{HTTP_HDR_RES*} HTTP响应头类型的数据指针,不能为空
dbuf{const char*} 状态行数据, 如: HTTP/1.0 200 OK,不能为空
返回
{int} 0: ok; < 0: error,分析结果存储在 hh 结构中
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_reset()

HTTP_API void http_hdr_reset ( HTTP_HDR hh)

重置一个HTTP通用头的状态,释放内部成员变量,主要用于keep-alive的长连接多次请求

参数
hh{HTTP_HDR*} HTTP通用头类型的数据指针,不能为空
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_set_keepalive()

HTTP_API int http_hdr_set_keepalive ( const HTTP_HDR_REQ req,
HTTP_HDR_RES res 
)

根据HTTP请求头的字段来设置是否与服务端保持长连接, 结果存储于HTTP响应头中

参数
req{const HTTP_HDR_REQ*} HTTP请求头
res{HTTP_HDR_RES*} HTTP响应头,存储分析结果
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_hdr_sprint()

HTTP_API void http_hdr_sprint ( ACL_VSTRING bf,
const HTTP_HDR hh,
const char *  msg 
)

调试输出HTTP协议头部数据,调试类接口

参数
bf{ACL_VSTRING*} 输出结果将会定向至该缓冲区
hh{HTTP_HDR*} 通用HTTP头类型的数据指针,不能为空
msg{const char*} 用户希望与头部信息一起输出的自定义信息, 可以为空
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_init()

HTTP_API void http_init ( const char *  tmpl_path)

初始化HTTP应用协议

参数
tmpl_path{const char*} 模板信息文件的存放路径
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_mkrfc1123()

HTTP_API const char* http_mkrfc1123 ( char *  buf,
size_t  size,
time_t  t 
)

将时间值转换成RFC1123所要求的格式

参数
buf{char*} 存储空间
size{size_t} buf 的空间大小
t{time_t} 时间值
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_req_body_get_async()

HTTP_API void http_req_body_get_async ( HTTP_REQ request,
ACL_ASTREAM astream,
HTTP_BODY_NOTIFY  notify,
void *  arg,
int  timeout 
)

异步从客户端读取请求的BODY协议体, 在接收过程中边接收连回调用户的 notify 回调函数, 如果 notify 返回小于 0 的值, 则认为出错且不再继续接收数据

参数
request{HTTP_REQ*} HTTP请求体类型指针, 不能为空, 且 request->hdr 为空
astream{ACL_ASTREAM*} 与客户端连接的数据流, 不能为空
notify{HTTP_BODY_NOTIFY} 接收客户端数据过程中回调的用户的注册函数
arg{void*} notify 调用时的一个参数
timeout{int} 接收数据过程中的读超时时间
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_req_body_get_sync()

HTTP_API http_off_t http_req_body_get_sync ( HTTP_REQ request,
ACL_VSTREAM stream,
void *  buf,
int  size 
)

同步从客户端读取请求的BODY协议体

参数
request{HTTP_REQ*} HTTP请求体类型指针, 不能为空, 且 request->hdr 为空
stream{ACL_VSTREAM*} 与客户端连接的数据流, 不能为空
buf{void *} 存储结果的内容空间
size{int} buf 的空间大小
返回
ret {http_off_t} 本次读到的HTTP请求体的内容 0: 表示读完了HTTP数据体内容,但并不代表数据流已经关闭; < 0: 表示读出错,流关闭或出错; > 0: 表示未读完,目前读到ret 个字节的数据
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_req_free()

HTTP_API void http_req_free ( HTTP_REQ request)

释放请求体对象

参数
request{HTTP_REQ*} 请求体对象
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_req_new()

HTTP_API HTTP_REQ* http_req_new ( HTTP_HDR_REQ hdr_req)

根据HTTP请求头分配一个请求体对象

参数
hdr_req{HTTP_HDR_REQ*} 请求头对象
返回
{HTTP_REQ*} 请求体对象
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_res_body_get_async()

HTTP_API void http_res_body_get_async ( HTTP_RES respond,
ACL_ASTREAM astream,
HTTP_BODY_NOTIFY  notify,
void *  arg,
int  timeout 
)

◆ http_res_body_get_sync()

HTTP_API http_off_t http_res_body_get_sync ( HTTP_RES respond,
ACL_VSTREAM stream,
void *  buf,
int  size 
)

同步从服务端读取响应的BODY协议体

参数
respond{HTTP_RES*} HTTP响应体类型指针, 不能为空, 且 respond->hdr 为空
stream{ACL_VSTREAM*} 与客户端连接的数据流, 不能为空
buf{void *} 存储结果的内容空间
size{int} buf 的空间大小
返回
ret {http_off_t} 本次读到的HTTP响应体的内容 0: 表示读完了HTTP数据体内容,但并不代表数据流已经关闭; < 0: 表示读出错,流关闭或出错; > 0: 表示未读完,目前读到ret 个字节的数据
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_res_free()

HTTP_API void http_res_free ( HTTP_RES respond)

释放响应体对象

参数
respond{HTTP_RES*} 响应体对象
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_res_new()

HTTP_API HTTP_RES* http_res_new ( HTTP_HDR_RES hdr_res)

根据HTTP响应头分配一个响应体对象

参数
hdr_res{HTTP_HDR_RES*} 响应头对象
返回
{HTTP_RES*} 响应体对象
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_status_line()

HTTP_API const char* http_status_line ( int  status)

根据HTTP响应号(nxx)返回该值所代表的字符串

参数
status{int} 状态号,nxx(1xx, 2xx, 3xx, 4xx, 5xx)
返回
{const char*} 响应号所对应的字符串表示
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_tmpl_get()

HTTP_API const ACL_VSTRING* http_tmpl_get ( int  status)

读取对应HTTP响应状态码的模板信息

参数
status{int} HTTP 状态响应码
返回
{const ACL_VSTRING*} 对应HTTP响应状态码的模板信息
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_tmpl_load()

HTTP_API void http_tmpl_load ( const char *  tmpl_path)

装载HTTP响应代码的HTML模板

参数
tmpl_path{const char*} HTML模板文件所在的路径
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_tmpl_size()

HTTP_API int http_tmpl_size ( int  status)

获得相应HTTP响应状态码的模板提示信息的长度大小

参数
status{int} HTTP 状态响应码
返回
{int} 模板提示信息的长度大小
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_tmpl_title()

HTTP_API const char* http_tmpl_title ( int  status)

读取对应HTTP响应状态码的标题提示信息

参数
status{int} HTTP 状态响应码
返回
{const char*} 对应HTTP响应状态码的标题提示信息
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

◆ http_uri_correct()

HTTP_API void http_uri_correct ( int  onoff)

设置标志位,针对 HTTP 请求的 URI 中的 ? 问号被转义(即被转成 %3F)的请求是否做兼容性处理

参数
onoff{int} 为非 0 值时表示做兼容性处理,内部缺省值为 1
示例
F:/download/acl/help/include/protocol/http/lib_http.h.

变量说明

◆ fmt

HTTP_API void const char const char* fmt

在文件 lib_http.h620 行定义.

◆ name