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

Я вызываю REST WS с полезной нагрузкой JSON, чтобы подписаться на определенные события. Сервер отвечает HTTP-кодом 201 и полем Местоположение в 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/subscriptions/5ab386ad4bf6feec37ffe44d») в C++ с помощью curlpp?


person LuisGP    schedule 22.03.2018    source источник
comment
ПРИМЕЧАНИЕ. Перенаправление cout и cerr не работает.   -  person LuisGP    schedule 22.03.2018


Ответы (2)


Есть несколько значений, которые вы можете получить, используя семейство функций 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;
    }));
person Eelke    schedule 29.09.2018

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

Просто добавление

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

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

person LuisGP    schedule 22.03.2018