千家信息网

网络通信第一课 C++封装HTTP请求报文说明

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成使用C++组装上述报文boost::asio::streambuf request;std
千家信息网最后更新 2026年11月01日网络通信第一课 C++封装HTTP请求报文说明

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成


使用C++组装上述报文

boost::asio::streambuf request;

std::ostream request_stream(&request);

request_stream << "POST /cs/restfull/operationRestfullApi/excuteSqlByCode HTTP/1.1\r\n";

request_stream << "Host: 192.168.0.88:8080\r\n";

//request_stream << "Connection: keep-alive\r\n";

request_stream << "Content-Length: " << strEncodeBuffer.size() << "\r\n";

request_stream << "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n";

//request_stream << "User-Agent: Mozilla/4.0\r\n";

//request_stream << "Accept-Language: zh-CN\r\n";

request_stream << "\r\n";

request_stream << strEncodeBuffer;


请求行

request_stream << "POST /cs/restfull/operationRestfullApi/excuteSqlByCode HTTP/1.1\r\n";



请求头部

request_stream << "Host: 192.168.0.88:8080\r\n";

request_stream << "Connection: keep-alive\r\n";

request_stream << "Content-Length: " << strEncodeBuffer.size() << "\r\n";

request_stream << "Content-Type: application/x-www-form-urlencoded; charset=UTF-8\r\n";

//request_stream << "User-Agent: Mozilla/4.0\r\n";

//request_stream << "Accept-Language: zh-CN\r\n";

空行

request_stream << "\r\n";

说明:最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头


请求数据

request_stream << strEncodeBuffer;

说明:请求数据不在GET方法中使用,而是在POST方法中使用。

POST方法适用于需要客户填写表单的场合。与请求数据相关的最常使用的请求头是Content-Type和Content-Length


注意

使用Boost库asio组件的时候,建立的套接字,如果没有设置TIME_WAIT的资源销毁时间,会导致网络套接字回收缓慢,建议使用代码如下:

io_service iosev;
ip::tcp::socket socket(iosev);
socket.open(boost::asio::ip::tcp::v4());

//TIME_WAIT回收资源时间

boost::asio::socket_base::linger option(true, 0);
socket.set_option(option);


注意

配置连接IP地址和端口的时候,需要注意如果传递的IP地址如下:"537MainStreet"会导致程序崩溃异常如果没有使用ec捕获异常

ip::tcp::endpoint ep(ip::address_v4::from_string(strIP), nPort);

正确代码

boost::system::error_code ec;
ip::tcp::endpoint ep(ip::address_v4::from_string(strIP, ec), nPort);

采用asio库的时候,需要更多的注意ec的使用,否则需要使用try catch捕获异常,否则导致程序崩溃


参考

http://blog.csdn.net/zhangliang_571/article/details/23508953


数据 方法 时候 空行 报文 代码 地址 头部 套接字 时间 程序 资源 网络 C++ 缓慢 个部 场合 客户 建议 换行符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网 亿人帮互联网科技有限公司 中关村互联网 科技集团 中国互联网科技股 易互联网科技有限公司 紫鲸互联网科技 顺玮阁互联网科技 互联网金融 科技创新 齐家互联网科技有限公司 互联网前沿科技 创业天下互联网科技有限公司 欧洲十大科技互联网公司 来此购互联网科技有限公司 苏州五指互联网络科技有限 亳州好赞互联网科技有限公司 科技大学互联网 工业互联网展湾科技股份有限公司 广州富喜互联网络科技 盐城市攀科互联网科技有限公司 保山浩联互联网科技有限公司 互联网科技缩写 新华互联网科技校企合作 衡水科技产业互联网平台 富国互联网科技创新基金 互联网科技公司营业执照怎么办理 广州千川互联网科技有限公司 图游互联网科技 萌小萌互联网科技河南有限公司 长沙渺峰互联网科技有限公司 互联网科技快速发展优美句子
0