Boost::ASIO HTTP POST 中的空正文

Posted

技术标签:

【中文标题】Boost::ASIO HTTP POST 中的空正文【英文标题】:Empty body in Boost::ASIO HTTP POST 【发布时间】:2017-06-29 06:29:51 【问题描述】:

我尝试在下面的代码中使用 Post 方法。在服务器端,主体总是空的。

tcp::endpoint ip_port(address::from_string(host), port);
socket.connect(ip_port);

boost::asio::streambuf request;
std::ostream request_stream(&request);

request_stream << "POST /myservice HTTP/1.1\n\n";
request_stream << "Host:" << "host:port" << "\r\n";
request_stream << "User-Agent: C/1.0" << "\r\n";
request_stream << "Content-Type: application/json; charset=utf-8\r\n";
request_stream << "Accept: */*\r\n";
request_stream << "Content-Length: ";
request_stream << json.length() + "\r\n";
request_stream << "Connection: close\r\n\r\n"; 
request_stream << json;

boost::asio::write(socket, request);

我通过从其他休息客户端发送请求来检查服务器端,它工作正常。请让我知道我做错了什么。

【问题讨论】:

也许在boost::asio::write之前添加request_stream &lt;&lt; std::flush; @Mankarse 试过了,遇到同样的问题。 【参考方案1】:

终于找到了。第一行 \n\n 的问题。如果有两个\n,则请求在那里结束。我尝试了以下代码,并且能够在服务器端获取 json 正文。

requestStream << "POST " << "/myservice" << " HTTP/1.1\r\n";
requestStream << "Host: " << "myhost" << "\r\n";
requestStream << "Accept: application/json\r\n";
requestStream << "Content-Type: application/json; charset=UTF-8\r\n";
requestStream << "Content-Length: " << json.length() << "\r\n";
requestStream << "\r\n";
requestStream << json << "\n\n";

【讨论】:

以上是关于Boost::ASIO HTTP POST 中的空正文的主要内容,如果未能解决你的问题,请参考以下文章

boost asio 学习

std::boost::asio::post / dispatch 使用哪个 io_context?

Boost::asio io_service 实现分析

Boost.Asio和Boost的联系和区别

使用 Fiddler 拦截 Boost.Asio HTTP/S 请求

Boost.Asio的使用技巧