如何在curlpp响应中获取标头响应和响应主体分离

时间:2019-05-17 05:11:02

标签: c++ c++11 curlpp

我是C ++和curlpp的新手,我需要headerpp响应和curlpp响应中的响应主体,但是正在发生的事情是我将两个东西都放在同一字符串中,是否有任何方式或任何标记将帮助我分别存储标头响应和响应正文。

   std::ostringstream respMsg;

   request.setOpt(new PostFields(body));

   request.setOpt(new PostFieldSize(body.size()));
   request.setOpt(new Header(1));
   request.setOpt(new curlpp::options::WriteStream(&respMsg));

   if (curlpp::infos::ResponseCode::get(request) == 200){
        // success

        std::cout << respMsg.str() << std::endl;

        json data = parse(respMsg.str())

   } else {

      // failure

      std::cout << respMsg.str() << std::endl;

   }

我期望的是在“ if”部分,我只需要json字符串,但是我得到的是报头响应+ JSON字符串,我无法将其分开,是否有任何setOPt标志或以任何方式同时获得两者分别的东西, 注意:我还需要其他部分的标题响应来打印错误消息。任何指针表示赞赏。在此先感谢您,英语不好。

1 个答案:

答案 0 :(得分:0)

最简单的方法:

您可以简单地拆分响应:

std::string response = respMsg.str();
size_t endOfHeader = response.find("\r\n\r\n");

if (endOfHeader != std::string::npos) {
    std::string header = response.substr(0, endOfHeader);
    std::string body = response.substr(endOfHeader + 4);
}

最好的方法:

如果仅需要响应正文,则可以使用以下命令禁用header选项 request.setOpt(new Header(0));或直接删除该行。

如果您还需要标题,则可以禁用header并使用HeaderFunction选项。

std::string headers;

size_t HeaderCallback(char* ptr, size_t size, size_t nmemb)
{
    int totalSize = size * nmemb;
    headers += std::string(ptr, totalSize);
    return totalSize;
}

request.setOpt(curlpp::options::HeaderFunction(HeaderCallback));

如果您阅读libcurl API:here,则可以更好地理解这些选项。 (curlpp只是libcurl的包装)。

header_function文档是here