#c #rest #cpprest-sdk
#c #rest #cpprest-sdk
Вопрос:
Я несколько раз работал с REST SDK. Я хочу извлечь Bearer
токен из заголовков ответов, используя C .
Я пробовал это:
CMyClass::SomeMethod(const web::http::http_requestamp; Request)
{
const web::http::http_headersamp; headers = Request.headers();
web::http::http_headers::const_iterator it = headers.find(web::http::header_names::authorization);
if (it != headers.end())
{
std::cout << " t" << it->first.c_str() << "t" << it->second.c_str() << std::endl;
}
}
но я получаю только это:
Что говорит мне, что я сделал что-то не так.
Итак, как я могу извлечь Bearer
токен из web::http::http_request
заголовка?
Комментарии:
1. Улучшается ли поведение, если вы не используете c_str()?
2. Конечно, я пробовал без c_str(), такое же поведение…
Ответ №1:
Вывод, который вы видите, означает, что вы не передаете char*
строковые указатели std::cout
.
Предполагая, что вы используете REST SDK от Microsoft (вы не сказали), его web::http::http_headers
класс содержит utility::string_t
значения и utility::string_t
определяется как std::wstring
в Windows (несмотря на то, что говорится в документации), а не std::string
так, как вы ожидаете.
Это означает, что вы передаете wchar_t*
строковые указатели на std:::cout
, у которых нет operator<<
for wchar_t*
, но есть один for void*
, отсюда и вывод, который вы видите.
Вам нужно будет использовать std::wcout
вместо этого или преобразовать std::wstring
данные std::string
перед их печатью.