读取POCO HTTPClientRequest的响应

Read Response of POCO HTTPClientRequest

本文关键字:响应 HTTPClientRequest POCO 读取      更新时间:2023-10-16

嗨,我正在上传一个文件,使用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();

我得到这个异常"SSL Connection unexpected Closed"在这行:

outStringStream << inStream.rdbuf();

同样,如果我尝试将响应读取为:

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

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

另外,如果我将响应状态读取为res.getStatus()和res.getReason(),则返回200Ok。

这个代码是为我工作,你可以试试。

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会话