http_client 个 cpprestsdk/casablanca

http_client of cpprestsdk/casablanca

我有 api https://api.gm-system.net/api/authenticate/searchStaffs/searchText 其中 return 一个列表人员。

这是我使用 cpprestsdk 和 c++ 访问此 api 的代码。

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.

我怎样才能让它接受任何类似这样的搜索文本。

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

希望有人能帮助我。谢谢。

自从

The C++ REST SDK uses a different string type dependent on the platform being targeted. For example for the Windows platforms utility::string_t is std::wstring using UTF-16, on Linux std::string using UTF-8.

您应该在需要时使用 utility::string_t class,不要将其与 std::stringconst 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 类型作为传入的参数类型(即在 Windows 上使用 std::wstring) :

std::wstring searchText = L"Michael";
MyTest(searchText);