我有一个小代码,它使用Poco库向本地Web服务发送POST HTTP调用并获得响应。目前,我已在终端上打印了带有cout的响应消息。
#include "Poco/Net/HTTPClientSession.h"
#include "Poco/Net/HTTPRequest.h"
#include "Poco/Net/HTTPResponse.h"
#include "Poco/StreamCopier.h"
#include <iostream>
using namespace std;
using namespace Poco::Net;
using namespace Poco;
int main (int argc, char* argv[])
{
HTTPClientSession s("localhost", 8000);
HTTPRequest request(HTTPRequest::HTTP_POST, "/test");
s.sendRequest(request);
HTTPResponse response;
std::istream& rs = s.receiveResponse(response);
StreamCopier::copyStream(rs, cout);
return 0;
}
如何将响应消息存储在char数组或字符串中,而不是打印或存储在文件中?
答案 0 :(得分:8)
我不熟悉Poco,但你可以用std::ostringstream
替换std::cout
,然后将字符串拉出来。
所以不要这样做:
StreamCopier::copyStream(rs, cout);
使用此代码
#include <sstream>
// ...
std::ostringstream oss;
StreamCopier::copyStream(rs, oss);
std::string response = oss.str();
// use "response" ...
或者,更直接地说,您可以使用copyToString
直接复制到std::string
,为自己节省至少一个分配+副本:
std::string responseStr;
StreamCopier::copyToString(rs, responseStr);
// use "responseStr" ...