Как извлечь токен на предъявителя из заголовка (rest sdk)

#c #rest #cpprest-sdk

#c #rest #cpprest-sdk

Вопрос:

Я несколько раз работал с REST SDK. Я хочу извлечь Bearer токен из заголовков ответов, используя C .

Изображение от Postman: изображение

Я пробовал это:

 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 перед их печатью.