从 Poco http 客户端获取对字符串的响应

Get response from Poco http client to string

我有一个小代码,它使用 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;
}

如何将响应消息存储在字符数组或字符串中而不打印或存储在文件中?

我对 Poco 不熟悉,但您可以将 std::cout 替换为 std::ostringstream,然后从中拉出字符串。

所以不要这样做:

StreamCopier::copyStream(rs, cout);

使用此代码

#include <sstream>
// ...
std::ostringstream oss;
StreamCopier::copyStream(rs, oss);
std::string response = oss.str();
// use "response" ...

或者更直接的,可以用copyToString直接copy成一个std::string,至少给自己节省一次allocation+copy:

std::string responseStr;
StreamCopier::copyToString(rs, responseStr);
// use "responseStr" ...