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

2024-01-06,,

一个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++封装HTTP请求报文说明.doc》

下载本文的Word格式文档,以方便收藏与打印。