如何在新版Azure SDK for C++中以编程方式配置特定代理?
新版Azure SDK for C++代理配置方法
新版Azure SDK for C++完全支持编程式配置代理,只是实现方式和旧版Microsoft.Azure.Storage.CPP.v140不同——旧版的operation_context全局代理逻辑已被废弃,新版采用基于HTTP传输层的灵活配置方案,以下是具体实现方法:
核心思路
所有Azure SDK客户端都允许通过自定义HTTP传输层(Transport)配置代理,既可为单个客户端单独设置,也可创建全局共享的传输实例供所有客户端复用。
1. 单个客户端配置代理(以存储文件共享为例)
#include <Azure/Storage/Files/Shares.hpp> #include <Azure/Core/Http/WinHttpTransport.hpp> int main() { // 初始化代理配置 Azure::Core::Http::WinHttpTransportOptions transportOpts; // 设置代理地址(支持http/https/socks5协议) transportOpts.Proxy = Azure::Core::Http::WebProxy("http://your-proxy-ip:port"); // 若代理需认证,添加凭据 transportOpts.Proxy.SetCredentials("proxy-username", "proxy-password"); // 创建带代理配置的传输实例 auto proxyTransport = std::make_shared<Azure::Core::Http::WinHttpTransport>(transportOpts); // 将传输实例传入客户端配置,生成目标客户端 auto shareClient = Azure::Storage::Files::Shares::ShareClient::CreateFromConnectionString( "your-storage-connection-string", "target-share-name", Azure::Storage::Files::Shares::ShareClientOptions{}.SetTransport(proxyTransport)); // 后续该客户端的所有请求都会走指定代理 return 0; }
2. 全局代理配置(所有客户端共用)
如果需要让所有SDK客户端统一使用同一个代理,只需创建一个全局共享的传输实例,在每个客户端初始化时传入即可:
// 全局共享的代理传输实例 std::shared_ptr<Azure::Core::Http::HttpTransport> g_proxyTransport = []() { Azure::Core::Http::WinHttpTransportOptions opts; opts.Proxy = Azure::Core::Http::WebProxy("http://your-proxy-ip:port"); return std::make_shared<Azure::Core::Http::WinHttpTransport>(opts); }(); // 后续创建任何客户端时传入全局传输实例 auto blobClient = Azure::Storage::Blobs::BlobClient::CreateFromConnectionString( "connection-string", "blob-container/blob-name", Azure::Storage::Blobs::BlobClientOptions{}.SetTransport(g_proxyTransport));
3. 跨平台传输层的代理配置
新版SDK支持两种主流HTTP传输层,代理配置逻辑一致,仅需替换对应的传输类和配置类:
- WinHttpTransport:Windows平台专属,使用
WinHttpTransportOptions配置 - CurlTransport:跨平台(Windows/Linux/macOS),使用
CurlTransportOptions配置
关键注意事项
- 旧版的
azure::storage::operation_context::set_default_proxy在新版已被彻底移除,无需再寻找对应API - 代理地址直接传入协议+IP+端口格式的字符串即可,无需额外转换
- 若代理无需认证,跳过
SetCredentials步骤即可
内容的提问来源于stack exchange,提问作者gordieb
相关产品推荐
相关产品推荐

