读取POCO HTTPClientRequest的响应

时间:2014-07-18 05:58:56

标签: c++ http upload stream poco-libraries

您好我在POCO中使用分段上传来上传文件(通过正常的POST请求发送附加边界的文件内容)。但是,当我尝试将响应读作:

std::ostream& myOStream = session.sendRequest(req);
// sends the body
myOStream << reqBody;

Poco::Net::HTTPResponse res;

// get the response body from server
std::istream& inStream = session.receiveResponse(res);
std::ostringstream outStringStream;
outStringStream << inStream.rdbuf();
std::cout<< outStringStream.str();

我收到此异常&#34; SSL连接意外关闭&#34;在这一行:

outStringStream << inStream.rdbuf();

此外,如果我尝试将响应读作:

Poco::StreamCopier::copyStream( inStream, outStringStream );
std::cout<< outStringStream.str();

我得到空响应(在这种情况下没有例外)。 服务器返回纯文本作为响应。如果使用qt,我会将其作为响应,但不是通过POCO。请帮我看一下回复正文。可能是这个例外的原因??

另外,如果我将响应状态读为res.getStatus()和res.getReason(),则返回200Ok。我不明白回应机构的问题是什么。

1 个答案:

答案 0 :(得分:0)

此代码对我有用,你可以试试。

std::istream& rs = _httpClientSession.receiveResponse(response);
memset(_response, 0, RESPONSE_BUFF_SIZE);
rs.read(_response, RESPONSE_BUFF_SIZE-1);
//below code is just to clear the istream
std::streamsize nRead = rs.gcount();
while( !rs.eof() || nRead != 0)
{
    rs.read(_response, RESPONSE_BUFF_SIZE);
    nRead = rs.gcount();
}

还有一件事,如果有任何异常,你必须通过调用_httpClientSession.reset()重置http会话;