更新时间:2026-07-13 GMT+08:00
分享

代理设置失效(C SDK)

问题1:Windows端Demo设置代理后报错且代理设置失效

现象:

Windows端Demo中设置了代理,程序报错且代理设置未生效。

问题根因:

某些SDK版本中Demo使用的头文件 eSDKOBS.h 与SDK的头文件未同步更新,Demo中缺少新增的结构体成员(如 obs_upload_file_server_callback),导致代理设置失效。

解决办法:

  1. 升级到最新版本SDK(推荐)。
  2. 如需使用旧版本,将SDK安装目录下 source/eSDK_OBS_API/eSDK_OBS_API_C++/build/obs/demo/eSDKOBS.h 复制到 source/eSDK_OBS_API/eSDK_OBS_API_C++/inc/ 目录替换原文件,并按新头文件中的接口变化调整Demo代码。

问题2:设置了代理仍然连接失败

现象:

通过 obs_http_request_option 正确设置了 proxy_host 和 proxy_auth,部分请求仍然连接失败。

问题根因:

SDK内部 get_api_version 函数未读取用户设置的代理配置,导致该请求未走代理通道。此为SDK已知缺陷。

解决办法:

升级到最新版本SDK。如需临时修复,可在SDK源码 request.c 的 get_api_version 函数中,参考 setup_curl 函数的代理设置方式,添加 CURLOPT_PROXY 和 CURLOPT_PROXYUSERPWD 项的设置逻辑。

正确的代理设置方式

通过 obs_http_request_option 配置代理,相关参数说明详见配置option(C SDK)

#include "eSDKOBS.h"
#include <stdio.h>
int main()
{
    obs_status ret_status = obs_initialize(OBS_INIT_ALL);
    if (OBS_STATUS_OK != ret_status)
    {
        printf("obs_initialize failed(%s).\n", obs_get_status_name(ret_status));
        return -1;
    }
    obs_options options;
    init_obs_options(&options);
    // host_name填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
    options.bucket_options.host_name = "obs.cn-north-4.myhuaweicloud.com";
    options.bucket_options.access_key = getenv("ACCESS_KEY_ID");
    options.bucket_options.secret_access_key = getenv("SECRET_ACCESS_KEY");
    options.bucket_options.bucket_name = "example-bucket-name";
    // 设置代理服务器
    options.request_options.proxy_host = "http://proxy.example.com:8080";
    // 设置代理认证信息(格式:username:password),无认证则不设置
    options.request_options.proxy_auth = "username:password";
    // ... 业务代码 ...
    obs_deinitialize();
    return 0;
}

相关文档