acl  3.5.3.0
acl::HttpServletRequest类 参考

#include <HttpServletRequest.hpp>

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

Public 成员函数

 HttpServletRequest (HttpServletResponse &res, session &store, socket_stream &stream, const char *charset=NULL, int body_limit=102400)
 
 ~HttpServletRequest (void)
 
http_method_t getMethod (string *method_s=NULL) const
 
const std::vector< HttpCookie * > & getCookies (void) const
 
const char * getCookieValue (const char *name) const
 
void setCookie (const char *name, const char *value)
 
const char * getHeader (const char *name) const
 
const char * getQueryString (void) const
 
const char * getPathInfo (void) const
 
const char * getRequestUri (void) const
 
HttpSessiongetSession (bool create=true, const char *sid=NULL)
 
istreamgetInputStream (void) const
 
socket_streamgetSocketStream (void) const
 
long long int getContentLength (void) const
 
bool getRange (long long int &range_from, long long int &range_to)
 
const char * getContentType (bool part=true, http_ctype *ctype=NULL) const
 
const char * getCharacterEncoding (void) const
 
const char * getLocalCharset (void) const
 
const char * getLocalAddr (void) const
 
unsigned short getLocalPort (void) const
 
const char * getRemoteAddr (void) const
 
unsigned short getRemotePort (void) const
 
const char * getRemoteHost (void) const
 
const char * getUserAgent (void) const
 
const char * getParameter (const char *name, bool case_sensitive=false) const
 
http_mimegetHttpMime (void)
 
jsongetJson (size_t body_limit=1024000)
 
bool getJson (json &out, size_t body_limit=1024000)
 
xmlgetXml (size_t body_limit=1024000)
 
bool getXml (xml &out, size_t body_limit=1024000)
 
stringgetBody (size_t body_limit=1024000)
 
bool getBody (string &out, size_t body_limit=1024000)
 
http_request_t getRequestType (void) const
 
const char * getRequestReferer (void) const
 
const http_ctypegetHttpCtype (void) const
 
bool isKeepAlive (void) const
 
int getKeepAlive (void) const
 
bool getVersion (unsigned &major, unsigned &minor) const
 
void getAcceptEncoding (std::vector< string > &out) const
 
void setRwTimeout (int rw_timeout)
 
http_request_error_t getLastError (void) const
 
http_clientgetClient (void) const
 
void fprint_header (ostream &out, const char *prompt)
 
void sprint_header (string &out, const char *prompt)
 

额外继承的成员函数

- Protected 成员函数 继承自 acl::acl::noncopyable
 noncopyable ()
 
 ~noncopyable ()
 

详细描述

与 HTTP 客户端请求相关的类,该类不应被继承,用户也不需要 定义或创建该类对象

在文件 HttpServletRequest.hpp31 行定义.

构造及析构函数说明

◆ HttpServletRequest()

acl::HttpServletRequest::HttpServletRequest ( HttpServletResponse res,
session store,
socket_stream stream,
const char *  charset = NULL,
int  body_limit = 102400 
)

构造函数

参数
res{HttpServletResponse&}
store{session&} 存储会话数据的对象
stream{socket_stream&} 数据流,内部不会主动关闭流
charset{const char*} 本地字符集,该值非空时, 内部会自动将 HTTP 请求的数据转换为本地字符集,否则不转换
body_limit{int} 针对 POST 方法,当数据体为文本参数 类型时,此参数限制数据体的长度;当数据体为数据流或 MIME 格式或 on 为 false,此参数无效

◆ ~HttpServletRequest()

acl::HttpServletRequest::~HttpServletRequest ( void  )

成员函数说明

◆ fprint_header()

void acl::HttpServletRequest::fprint_header ( ostream out,
const char *  prompt 
)

将 HTTP 请求头输出至流中(文件流或网络流)

参数
out{ostream&}
prompt{const char*} 提示内容

◆ getAcceptEncoding()

void acl::HttpServletRequest::getAcceptEncoding ( std::vector< string > &  out) const

获得 HTTP 客户端支持的数据压缩算法集合

参数
out{std::vector<string>&} 存储结果集

◆ getBody() [1/2]

string* acl::HttpServletRequest::getBody ( size_t  body_limit = 1024000)

针对 POST 类方法(即有数据请求体情形),可以直接调用此方法获得请求 数据体的内容

参数
body_limit{size_t} 限定数据体长度以防止内存溢出,若请求数据 体超过此值,则返回错误;如果此值设为 0,则不限制长度
返回
{string*} 返回存放数据体的对象,返回 NULL 有以下原因: 1、读数据出错 2、没有数据体 3、数据体过长

◆ getBody() [2/2]

bool acl::HttpServletRequest::getBody ( string out,
size_t  body_limit = 1024000 
)

该功能与上面方法类似,唯一区别是将结果存入用户传入的对象中

参数
out{string&}
body_limit{size_t}
返回
{bool} 返回 false 原因如下: 1、读数据出错 2、没有数据体 3、数据体过长

◆ getCharacterEncoding()

const char* acl::HttpServletRequest::getCharacterEncoding ( void  ) const

获得 HTTP 请求头中的 Content-Type: text/html; charset=gb2312 中的 charset 字段值 gb2312

返回
{const char*} 返回 NULL 表示 Content-Type 字段 或 charset=xxx 不存在

◆ getClient()

http_client* acl::HttpServletRequest::getClient ( void  ) const

HttpServlet 类以服务模式(即非 CGI 方式)运行时,可以调用此 方法获得客户端连接的 HTTP 类对象,从而获得更多的参数

返回
{http_client*} 当以服务模式运行时,此函数返回 HTTP 客户端 连接非空对象;当以 CGI 方式运行时,则返回空指针

◆ getContentLength()

long long int acl::HttpServletRequest::getContentLength ( void  ) const

获得 HTTP 请求数据的数据长度

返回
{acl_int64} 返回 -1 表示可能为 GET 方法, 或 HTTP 请求头中没有 Content-Length 字段

◆ getContentType()

const char* acl::HttpServletRequest::getContentType ( bool  part = true,
http_ctype ctype = NULL 
) const

获得 HTTP 请求头中 Content-Type: text/html; charset=gb2312 Content-Type 的字段值

参数
part{bool} 如果为 true 则返回 text,否则返回完整的 值,如:text/html; charset=gb2312
ctype{http_ctype*} 为非空指针时,将存储完整的 http_ctype 信息
返回
{const char*} 返回 NULL 表示 Content-Type 字段不存在

◆ getCookies()

const std::vector<HttpCookie*>& acl::HttpServletRequest::getCookies ( void  ) const

获得 HTTP 客户端请求的所有 cookie 对象集合

返回
{const std::vector<HttpCookie*>&}

◆ getCookieValue()

const char* acl::HttpServletRequest::getCookieValue ( const char *  name) const

获得 HTTP 客户端请求的某个 cookie 值

参数
name{const char*} cookie 名称,必须非空
返回
{const char*} cookie 值,若返回 NULL 则表示该 cookie 不存在

◆ getHeader()

const char* acl::HttpServletRequest::getHeader ( const char *  name) const

获得 HTTP 请求头中的某个字段值

参数
name{const char*} HTTP 请求头中的字段名,非空
返回
{const char*} HTTP 请求头中的字段值,返回 NULL 时表示不存在

◆ getHttpCtype()

const http_ctype& acl::HttpServletRequest::getHttpCtype ( void  ) const

获得根据 HTTP 请求头获得的 http_ctype 对象

返回
{const http_ctype&}

◆ getHttpMime()

http_mime* acl::HttpServletRequest::getHttpMime ( void  )

当 HTTP 请求头中的 Content-Type 为 multipart/form-data; boundary=xxx 格式时,说明为文件上传数据类型, 则可以通过此函数获得 http_mime 对象

返回
{const http_mime*} 返回 NULL 则说明没有 MIME 对象, 返回的值用户不能手工释放,因为在 HttpServletRequest 的析 构中会自动释放

◆ getInputStream()

istream& acl::HttpServletRequest::getInputStream ( void  ) const

获得与 HTTP 客户端连接关联的输入流对象引用

返回
{istream&}

◆ getJson() [1/2]

json* acl::HttpServletRequest::getJson ( size_t  body_limit = 1024000)

数据类型为 text/json 或 application/json 格式时可调用此方法读取 json 数据体并进行解析,成功后返回 json 对象,该对象由内部产生并管理,当 本 HttpServletRequest 对象释放时该 json 对象一起被释放

参数
body_limit{size_t} 限定数据体长度以防止内存溢出,若请求数据 体超过此值,则返回错误;如果此值设为 0,则不限制长度
返回
{json*} 返回解析好的 json 对象,若返回 NULL 则有以下几个原因: 1、读数据出错 2、非 json 数据格式 3、数据体过长

◆ getJson() [2/2]

bool acl::HttpServletRequest::getJson ( json out,
size_t  body_limit = 1024000 
)

该功能与上面方法类似,唯一区别是将解析结果存入用户传入的对象中

参数
out{json&}
body_limit{size_t} 限定数据体长度以防止内存溢出,若请求数据 体超过此值,则返回错误;如果此值设为 0,则不限制长度
返回
{bool} 返回 false 原因如下: 1、读数据出错 2、非 json 数据格式 3、数据体过长

◆ getKeepAlive()

int acl::HttpServletRequest::getKeepAlive ( void  ) const

当客户端要求保持长连接时,从 HTTP 请求头中获得保持的时间

返回
{int} 返回值 < 0 表示不存在 Keep-Alive 字段

◆ getLastError()

http_request_error_t acl::HttpServletRequest::getLastError ( void  ) const

获得上次出错的错误号

返回
{http_request_error_t}

◆ getLocalAddr()

const char* acl::HttpServletRequest::getLocalAddr ( void  ) const

返回 HTTP 连接的本地 IP 地址

返回
{const char*} 返回空,表示无法获得

◆ getLocalCharset()

const char* acl::HttpServletRequest::getLocalCharset ( void  ) const

返回本地的字段字符集 @ return {const char*} 返回 NULL 表示没有设置本地字符集

◆ getLocalPort()

unsigned short acl::HttpServletRequest::getLocalPort ( void  ) const

返回 HTTP 连接的本地 PORT 号

返回
{unsigned short} 返回 0 表示无法获得

◆ getMethod()

http_method_t acl::HttpServletRequest::getMethod ( string method_s = NULL) const

获得 HTTP 客户端请求方法:GET, POST, PUT, CONNECT, PURGE

参数
method_s{string*} 非空时存储字符串方式的请求方法
返回
{http_method_t}

◆ getParameter()

const char* acl::HttpServletRequest::getParameter ( const char *  name,
bool  case_sensitive = false 
) const

获得 HTTP 请求中的参数值,该值已经被 URL 解码且 转换成本地要求的字符集;针对 GET 方法,则是获得 URL 中 ? 后面的参数值;针对 POST 方法,则可以获得 URL 中 ? 后面的参数值或请求体中的参数值

参数
name{const char*} 参数名
case_sensitive{bool} 比较时针对参数名是否区分大小写
返回
{const char*} 返回参数值,当参数不存在时返回 NULL

◆ getPathInfo()

const char* acl::HttpServletRequest::getPathInfo ( void  ) const

获得 http://test.com.cn/cgi-bin/test?name=value 中的 /cgi-bin/test 路径部分

返回
{const char*} 返回空串表示不存在

◆ getQueryString()

const char* acl::HttpServletRequest::getQueryString ( void  ) const

获得 HTTP GET 请求方式 URL 中的参数部分,即 ? 后面的部分

返回
{const char*} 没有进行URL 解码的请求参数部分, 返回空串则表示 URL 中没有参数

◆ getRange()

bool acl::HttpServletRequest::getRange ( long long int &  range_from,
long long int &  range_to 
)

如果客户端的请求是分段数据,则该函数将获得请求头中的长度起始地址 及结束地址

参数
range_from{long long int&} 偏移起始位置
range_to{long long int&} 偏移结束位置
返回
{bool} 若出错或非分段请求则返回false,若是分段请求则返回true 注:range_from/range_to 下标从 0 开始

◆ getRemoteAddr()

const char* acl::HttpServletRequest::getRemoteAddr ( void  ) const

返回 HTTP 连接的远程客户端 IP 地址

返回
{const char*} 返回空,表示无法获得

◆ getRemoteHost()

const char* acl::HttpServletRequest::getRemoteHost ( void  ) const

获得 HTTP 请求头中设置的 Host 字段

返回
{const char*} 如果为空,则表示不存在

◆ getRemotePort()

unsigned short acl::HttpServletRequest::getRemotePort ( void  ) const

返回 HTTP 连接的远程客户端 PORT 号

返回
{unsigned short} 返回 0 表示无法获得

◆ getRequestReferer()

const char* acl::HttpServletRequest::getRequestReferer ( void  ) const

获得 HTTP 请求页面的 referer URL

返回
{const char*} 为 NULL 则说明用户直接访问本 URL

◆ getRequestType()

http_request_t acl::HttpServletRequest::getRequestType ( void  ) const

获得 HTTP 请求数据的类型

返回
{http_request_t},一般对 POST 方法中的上传文件应用,需要调用 该函数获得是否是上传数据类型,当该函数返回 HTTP_REQUEST_OTHER 时, 用户可以通过调用 getContentType 获得具体的类型字符串

◆ getRequestUri()

const char* acl::HttpServletRequest::getRequestUri ( void  ) const

获得 http://test.com.cn/cgi-bin/test?name=value 中的 /cgi-bin/test?name=value 路径部分

返回
{const char*} 返回空串表示不存在

◆ getSession()

HttpSession& acl::HttpServletRequest::getSession ( bool  create = true,
const char *  sid = NULL 
)

获得与该 HTTP 会话相关的 HttpSession 对象引用

参数
create{bool} 当 session 不存在时是否在缓存服务器自动创建; 当某客户端的 session 不存在且该参数为 false 时,则该函数返 回的 session 对象会因没有被真正创建而无法进行读写操作
sid{const char*} 当 session 不存在,且 create 参数非空时, 如果 sid 非空,则使用此值设置用户的唯一会话,同时添加进客户端的 cookie 中
返回
{HttpSession&} 注:优先级,浏览器 COOKIE > create = true > sid != NULL

◆ getSocketStream()

socket_stream& acl::HttpServletRequest::getSocketStream ( void  ) const

获得 HTTP 双向流对象,由构造函数的参数输入

返回
{socket_stream&}

◆ getUserAgent()

const char* acl::HttpServletRequest::getUserAgent ( void  ) const

获得 HTTP 请求头中设置的 User-Agent 字段

返回
{const char*} 如果为空,则表示不存在

◆ getVersion()

bool acl::HttpServletRequest::getVersion ( unsigned &  major,
unsigned &  minor 
) const

获得 HTTP 客户端请求的版本号

参数
major{unsigned&} 将存放主版本号
minor{unsigned&} 将存放次版本号
返回
{bool} 是否成功取得了客户端请求的版本号

◆ getXml() [1/2]

xml* acl::HttpServletRequest::getXml ( size_t  body_limit = 1024000)

数据类型为 text/xml 或 application/xml 格式时可调用此方法读取 xml 数据体并进行解析,成功后返回 mxl 对象,该对象由内部产生并管理,当 本 HttpServletRequest 对象释放时该 xml 对象一起被释放

参数
body_limit{size_t} 限定数据体长度以防止内存溢出,若请求数据 体超过此值,则返回错误;如果此值设为 0,则不限制长度
返回
{xml*} 返回解析好的 xml 对象,若返回 NULL 则有以下几个原因: 1、读数据出错 2、非 xml 数据格式

◆ getXml() [2/2]

bool acl::HttpServletRequest::getXml ( xml out,
size_t  body_limit = 1024000 
)

该功能与上面方法类似,唯一区别是将解析结果存入用户传入的对象中

参数
out{xml&}
body_limit{size_t} 限定数据体长度以防止内存溢出,若请求数据 体超过此值,则返回错误;如果此值设为 0,则不限制长度
返回
{bool} 返回 false 原因如下: 1、读数据出错 2、非 xml 数据格式 3、数据体过长

◆ isKeepAlive()

bool acl::HttpServletRequest::isKeepAlive ( void  ) const

判断 HTTP 客户端是否要求保持长连接

返回
{bool}

◆ setCookie()

void acl::HttpServletRequest::setCookie ( const char *  name,
const char *  value 
)

给 HTTP 请求对象添加 cookie 对象

参数
name{const char*} cookie 名,非空字符串
value{const char*} cookie 值,非空字符串

◆ setRwTimeout()

void acl::HttpServletRequest::setRwTimeout ( int  rw_timeout)

◆ sprint_header()

void acl::HttpServletRequest::sprint_header ( string out,
const char *  prompt 
)

将 HTTP 请求头输出至给定缓冲区中

参数
out{string&}
prompt{const char*} 提示内容

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