
# 代理设置失效(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)](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0203.html)：
```
#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;
}
```
