提升asio read_until异常文件结束?

时间:2015-04-01 06:34:43

标签: c++ http boost boost-asio

我正在尝试通过boost asio向服务器发送HTTP请求。我有以下用c ++创建的请求:

static const std::string TEMPLATE_HEADER =
"POST " + HTTP_PATH + " HTTP/1.1\r\n"
"Content-Type: application/json\r\n"
"Host: " + HOST_TAG + "\r\n"
"{ " + TEMPLATE_BODY + " }\r\n\r\n";

我发送的实际请求是:

POST / eikon / authsession / machines / HTTP / 1.1 Content-Type:application / json主持人:amers1.am.cp.icp2.mpp.ime.reuters.com:80 {“machineID”:“EP-03A482F1B88A” ,“password”:“PasswordReset”,“takeESOControl”:“false”,“deviceID”:“123”}

这在使用Postman(Google Chrome扩展程序)时有效,但使用boost asio似乎无效。我执行以下操作(上面的HTTP请求是strTemp。

// Write the request to the buffer
size_t request_length = strTemp.length();
boost::asio::write(s, boost::asio::buffer(strTemp, request_length));

char reply[max_length];

// When a reply is received ending in the correct tag we are looking for, store it in the response buffer
boost::asio::streambuf response;
boost::asio::read_until(s, response, Constants::BRACE_TAG);

BRACE_TAG变量=“}”(因为返回的响应以大括号结束。

我收到一个异常,说“异常:read_until:文件结束”。

任何人都知道发生了什么事?

感谢。

1 个答案:

答案 0 :(得分:2)

    标题和正文之间的
  1. 应该有一个双重换行符:

    "Host: " + HOST_TAG + "\r\n\r\n"
    
  2. 您可能需要发送Content-Length标头(What's the "Content-Length" field in HTTP header?)。邮差可能会为你添加