Как получить заголовок ответа 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;
}));