我正在尝试通过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:文件结束”。
任何人都知道发生了什么事?
感谢。
答案 0 :(得分:2)
应该有一个双重换行符:
"Host: " + HOST_TAG + "\r\n\r\n"
您可能需要发送Content-Length标头(What's the "Content-Length" field in HTTP header?)。邮差可能会为你添加