如何在 curlpp 响应中分别获得 header 响应和响应 body
How to get header response and response body separatey in curlpp response
我是 C++ 和 curlpp 的新手,我需要 header 响应和来自 curlpp 响应的响应 body,但发生的事情是我同时获得了这两个东西字符串,是否有任何方法或任何标志可以帮助我分别存储 header 响应和响应 body。
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 字符串,但我得到 header 响应 + JSON 字符串,我是无法分开,是否有任何 setOPt 标志或任何方式来分别获得这两个东西,
注意:我还需要 else 部分中的 header 响应来打印错误消息。任何指针表示赞赏。提前致谢,抱歉英语不好。
最简单的方法:
您可以简单地拆分响应:
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);
}
最佳方法:
如果您只需要响应 body,您可以使用禁用 header
选项
request.setOpt(new Header(0));
或简单地删除该行。
如果您也需要 headers,您可以禁用 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 响应和来自 curlpp 响应的响应 body,但发生的事情是我同时获得了这两个东西字符串,是否有任何方法或任何标志可以帮助我分别存储 header 响应和响应 body。
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 字符串,但我得到 header 响应 + JSON 字符串,我是无法分开,是否有任何 setOPt 标志或任何方式来分别获得这两个东西, 注意:我还需要 else 部分中的 header 响应来打印错误消息。任何指针表示赞赏。提前致谢,抱歉英语不好。
最简单的方法:
您可以简单地拆分响应:
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);
}
最佳方法:
如果您只需要响应 body,您可以使用禁用 header
选项
request.setOpt(new Header(0));
或简单地删除该行。
如果您也需要 headers,您可以禁用 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。