【问题标题】:Boost ASIO HTTP client POST提升 ASIO HTTP 客户端 POST
【发布时间】:2016-03-22 05:36:20
【问题描述】:

我正在尝试让 boost ASIO 库发送帖子,但变量从未发送到服务器。我知道服务器工作正常(用 curl 测试)

此代码不起作用(变量 msg 未发布到服务器)但是当我使用 curl 时它确实起作用

tcp::resolver resolver(io_service);
tcp::resolver::query query("localhost",  "3000"); // "http");
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;

tcp::socket socket(io_service);
boost::system::error_code error = boost::asio::error::host_not_found;
while (error && endpoint_iterator != end)
{
  socket.close();
  socket.connect(*endpoint_iterator++, error);
}
if (error)
  throw boost::system::system_error(error);

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

string sToSend = "msg=testing";

request_stream << "POST / HTTP/1.1\r\n";
request_stream << "Host: " << "localhost:3000" << "\r\n";
request_stream << "Accept: */*\r\n";
request_stream << "Content-Length: " <<  sToSend.length() << "\r\n";
request_stream << "Content-Type: application/x-www-form-urlencoded";
request_stream << "Connection: close\r\n\r\n"; d
request_stream << sToSend;

// Send the request.
boost::asio::write(socket, request);

boost::asio::streambuf response;
boost::asio::read_until(socket, response, "\r\n");

测试我使用的服务器

$ curl --verbose -X POST -d msg=testing123 localhost:3000/
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 3000 (#0)
> POST / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:3000
> Accept: */*
> Content-Length: 14
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 14 out of 14 bytes
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Date: Mon, 21 Mar 2016 20:55:00 GMT
< Connection: keep-alive
< Transfer-Encoding: chunked
< 
* Connection #0 to host localhost left intact

【问题讨论】:

  • 是否应该为我在并行执行时在多线程应用程序中发出的每个 http 请求创建新的 boost::asio::ssl::context 和 boost::asio::io_service?

标签: c++ boost-asio


【解决方案1】:

您在这一行缺少回车和换行:

request_stream << "Content-Type: application/x-www-form-urlencoded";

【讨论】:

  • 谢谢。我盯着这个看了至少 30 分钟,试图弄明白。出于某种原因,我完全忽略了 cr/lf
  • 是否应该为我发出的每个 http 请求创建新的 boost::asio::ssl::context 和 boost::asio::io_service?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-07
  • 2017-08-24
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2014-03-12
相关资源
最近更新 更多