Я вызываю 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;
Как мы можем получить Место нахождения поле заголовка (чье содержимое в примере «/ v2 / subscription / 5ab386ad4bf6feec37ffe44d») в C ++ с использованием curlpp?
Есть несколько значений, которые вы можете получить, используя семейство 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;
}));
Хорошо, я нашел это.
Просто добавив
subRequest.setOpt(new curlpp::options::Header(1));
делать трюки и сохраняет заголовки в ответе.