gpt4 book ai didi

c++ - 如何在 curlpp 响应中单独获取 header 响应和响应主体

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:34 25 4
gpt4 key购买 nike

我是 C++ 和 curlpp 的新手,我需要来自 curlpp 响应的 header 响应和响应主体,但发生的事情是我在同一个字符串中得到这两个东西,有什么方法或标志可以将帮助我分别存储 header 响应和响应正文。

   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;

}

我期待的是在“如果”部分,我只需要 json 字符串,但我得到的是 header 响应 + JSON 字符串,我无法将其分开,是否有任何 setOPt 标志或任何方式来获得两者东西分开,注意:我还需要 else 部分中的标题响应来打印错误消息。任何指针表示赞赏。提前致谢,抱歉英语不好。

最佳答案

最简单的方法:

您可以简单地拆分响应:

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 ,可以禁用 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 .

关于c++ - 如何在 curlpp 响应中单独获取 header 响应和响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56179988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com