http_client cpprestsdk/casablanca
У меня есть API https://api.gm-system.net/api/authenticate/searchStaffs/searchText
которые возвращают список сотрудников.
А вот мой код для доступа к этому API, используя cpprestsdk
с с ++.
auto fileStream = std::make_shared<ostream>();
// Open stream to output file.
pplx::task<void> requestTask = fstream::open_ostream(U("results.html")).then([=](ostream outFile)
{
*fileStream = outFile;
// Create http_client to send the request.
http_client client(U("https://api.gm-system.net/api/authenticate/searchStaffs/michael"));
return client.request(methods::GET);
})
// Handle response headers arriving.
.then([=](http_response response)
{
......
}
Этот, если хорошо. Но с этим я просто вручную введите "michael" searchText
,
Как я могу сделать так, чтобы он принимал любой searchText что-то вроде этого.
void MyTest(std::string searchText)
{
..... code here
// Create http_client to send the request.
http_client client(U("https://api.gm-system.net/api/authenticate/searchStaffs/" + searchText));
return client.request(methods::GET);
..... code here
}
Я уже пробовал это, это не будет работать. Некоторая проблема с макросом 'U'. С https://github.com/Microsoft/cpprestsdk/wiki/FAQ описание U macro
это говорит:
The 'U' macro can be used to create a string literal of the platform type. If you are using a library causing conflicts with the 'U' macro, for example Boost.Iostreams it can be turned off by defining the macro '_TURN_OFF_PLATFORM_STRING' before including the C++ REST SDK header files.
Если я наведу курсор на U
, ошибка говорит:
no operator "+" matches these operands operand types are; const wchar_t[57] + const std::string
Я надеюсь, что некоторые могут мне помочь. Благодарю.
1 ответ
Поскольку
В C++ REST SDK используется другой тип строки в зависимости от целевой платформы. Например, для платформ Windows утилита::string_t - это std:: wstring с использованием UTF-16, в Linux std::string с использованием UTF-8.
Вы должны использовать utility::string_t
класс, когда это требуется, и не смешивайте его с std::string
или же const char *
(и использовать U
макрос, когда нужно буквальное).
Другими словами, ваша функция должна принимать utility::string_t
как его searchText
аргумент (вместо std::string
):
void MyTest(utility::string_t searchText)
{
http_client client(U("https://api.gm-system.net/api/authenticate/searchStaffs/") + searchText);
// etc ...
}
используйте это так:
int main()
{
utility::string_t searchText = U("Michael");
MyTest(searchText);
return 0;
}
Если функция должна вызываться из контекста платформы, соответствующий std
Тип может быть использован в качестве переданного в качестве аргумента типа (т.е. использовать std::wstring
в Windows):
std::wstring searchText = L"Michael";
MyTest(searchText);