温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-06-10 15:12:43 来源:网络 阅读:1812 作者:fengyuzaitu 栏目:系统运维

一个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


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI