0

我正在尝试使用 cpprest sdk 在我的 Azure 存储帐户中列出 blob,这是我的代码:

pplx::task<void> HTTPRequestCustomHeadersAsync()
{
    http_client client(L"https://<account-name>.blob.core.windows.net/?comp=list");

    // Manually build up an HTTP request with header and request URI.
    http_request request(methods::GET);
    request.headers().add(L"Authorization", L"Sharedkey <account-name>:<account-key>");
    request.headers().add(L"x-ms-date", L"Thu, 08 Feb 2018 20:31:55 GMT ");
    request.headers().add(L"x-ms-version", L"2017-07-29");

    return client.request(request).then([](http_response response)
    {
        // Print the status code.
        std::wostringstream ss;
        ss << L"Server returned returned status code " << response.status_code() << L"." << std::endl;
        std::wcout << ss.str();
    });

    /* Sample output:
    Server returned returned status code 200.
    */
}

我一直收到返回的状态码为 403。如果我做得对,有人可以告诉我吗?

4

1 回答 1

0

请注意,您没有以正确的方式使用 cpprest-sdk,因为您在上面的代码中所做的是尝试直接(并且错误地)调用 Azure Storage REST API,而根本不通过 cpprest-sdk。

实际上,Azure 存储 REST API 合同的 HTTP 标头中的帐户密钥不是纯文本。相反,它是通过Azure 存储服务的身份验证中提到的复杂步骤计算的,以考虑一系列安全问题。幸运的是,所有这些逻辑都被 cpprest-sdk 封装了,你不需要了解它内部是如何工作的:

// Define the connection-string with your values.
const utility::string_t storage_connection_string(U("DefaultEndpointsProtocol=https;AccountName=your_storage_account;AccountKey=your_storage_account_key"));

// Create the blob client.
azure::storage::cloud_blob_client blob_client = storage_account.create_cloud_blob_client();  

我建议您在使用 cpprest-sdk 之前先阅读How to use Blob Storage from C++

于 2018-02-09T01:54:58.197 回答