Как получить ответ заголовка и тело ответа отдельно в ответе curlpp - PullRequest
1 голос
/ 17 мая 2019

Я новичок в C ++ и curlpp, и мне нужен был ответ заголовка и тело ответа из ответа 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;

   }

То, что я ожидаю, находится в части "если", мне просто нужна строка json, но я получаю ответ заголовка + строку JSON, которую я не могу разделить, есть ли флаг setOPt или какой-либо способ получить оба вещи отдельно, ПРИМЕЧАНИЕ: мне также нужен ответ заголовка в другой части, чтобы напечатать сообщение об ошибке. Любые указатели приветствуются. Заранее спасибо и извините за плохой английский.

1 Ответ

0 голосов
/ 18 мая 2019

Самый простой способ:

Вы можете просто разделить ответ:

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: здесь .(curlpp - это просто оболочка для libcurl).

Документация header_function здесь .

...