Как получить заголовок ответа curlpp

Я вызываю REST WS с полезной нагрузкой JSON, чтобы подписаться на определенные события. Сервер отвечает HTTP-кодом 201 и полем Location в HTTP-заголовке с идентификатором подписки.

Как пример, в curl (-v) мы получаем:

[...]
< HTTP/1.1 201 Created
< Connection: Keep-Alive
< Content-Length: 0
< Location: /v2/subscriptions/5ab386ad4bf6feec37ffe44d
[...]

В C++ с использованием curlpp мы хотим получить этот идентификатор, глядя на заголовок ответа. Теперь у нас есть только ответ тела (в данном случае пустой).

std::ostringstream response;
subRequest.setOpt(new curlpp::options::WriteStream(&response));

// Send request and get a result.
subRequest.perform();

cout << response.str() << endl;

Как мы можем получить поле заголовка Location (чье содержимое в примере "/v2/subscription /5ab386ad4bf6feec37ffe44d") в C++, используя curlpp?

2 ответа

Решение

Хорошо, я нашел это.

Просто добавив

subRequest.setOpt(new curlpp::options::Header(1));

делать трюки и сохраняет заголовки в ответе.

Есть несколько значений, которые вы можете получить, используя семейство curlpp::infos::*::get функции. Например, код ответа HTTP:

curlpp::infos::ResponseCode::get(subRequest) 

См. Заголовок Infos.hpp для полного списка. Если вам нужно значение, недоступное в одной из этих сведений, вы также можете выбрать получение заголовков отдельно от тела в обратном вызове.

subRequest.setOpt(new curlpp::options::HeaderFunction(
    [] (char* buffer, size_t size, size_t items) -> size_t {
        std::string s(buffer, size * items); // buffer is not null terminated
        std::cout << s;
        return size * items;
    }));
Другие вопросы по тегам