
# 配置option(C SDK)
![](https://support.huaweicloud.com/sdk-c-devg-obs/public_sys-resources/notice_3.0-zh-cn.png)
开发过程中，您有任何问题可以在GitHub上[提交issue](https://github.com/huaweicloud/huaweicloud-sdk-c-obs/issues)，或者在[华为云对象存储服务论坛](https://bbs.huaweicloud.com/forum/forum-620-1.html)中发帖求助。
在调用C SDK的功能函数时，都要传入obs_options参数，您可通过init_obs_options函数初始化obs_options配置，通过obs_options设置AK、SK、Endpoint、bucket、超时时间、临时鉴权。obs_options主要包括bucket_options和request_options两个参数，参数类型分别对应为obs_bucket_context和obs_http_request_option两个结构，可以设置的参数见下表：
表1obs_options.obs_bucket_context参数 
| **参数名称**          | **参数类型**                                                                                                                 | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|:---|
| host_name         | char \*                                                                                                                  | 必选       | **参数解释：** 终端节点（Endpoint），即OBS服务的访问域名。 **约束限制：** 不需要带"http://"或"https://"前缀，通过protocol参数控制协议类型。 **取值范围：** 无 **默认取值：** 无                                                                                                      |
| bucket_name       | char \*                                                                                                                  | 必选       | **参数解释：** 操作的桶名。 **约束限制：** 桶名需全局唯一，3～63个字符，数字或字母开头，支持小写字母、数字、"-"、"."。 **取值范围：** 无 **默认取值：** 无                                                                                                                                    |
| protocol          | obs_protocol                                                                                                             | 可选       | **参数解释：** 请求使用的协议类型。 **约束限制：** 无 **取值范围：** - OBS_PROTOCOL_HTTPS（使用https协议）、OBS_PROTOCOL_HTTP（使用http协议）。   **默认取值：** OBS_PROTOCOL_HTTPS，出于安全性考虑，建议使用https协议。 |
| access_key        | char \*                                                                                                                  | 必选       | **参数解释：** 连接对象存储服务的AK。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                     |
| secret_access_key | char \*                                                                                                                  | 必选       | **参数解释：** 鉴权使用的SK，可用于字符串的签名。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                   |
| storage_class     | [表1 obs_storage_class](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0091.html#obs_20_0091__table1958174392710)  | 可选       | **参数解释：** 在PUT、POST请求中，需要配置存储类别时设置此参数。 **约束限制：** 无 **取值范围：** 可详见[表1 obs_storage_class](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0091.html#obs_20_0091__table1958174392710)。 **默认取值：**OBS_STORAGE_CLASS_STANDARD                             |
| token             | char \*                                                                                                                  | 可选       | **参数解释：** 临时访问密钥的SecurityToken。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                            |
| bucket_type       | [表5 obs_bucket_type](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0085.html#obs_20_0085__table49057657)         | 可选       | **参数解释：** 创建桶时，指定是对象桶还是并行文件系统。 **约束限制：** 无 **取值范围：** 可详见[表5 obs_bucket_type](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0085.html#obs_20_0085__table49057657)。 **默认取值：**OBS_BUCKET_OBJECT                                                    |
| bucket_list_type  | [表6 obs_bucket_list_type](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0085.html#obs_20_0085__table42282303379) | 可选       | **参数解释：** 列举桶时，确定列举桶的类型。 **约束限制：** 无 **取值范围：** 可详见[表6 obs_bucket_list_type](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0085.html#obs_20_0085__table42282303379)。 **默认取值：** OBS_BUCKET_LIST_ALL                        |
   
表2obs_options.obs_http_request_option参数 
| **参数名称**           | **参数类型**     | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                 |
|:---|:---|:---|:---|
| keep_alive         | bool         | 可选       | **参数解释：** 是否开启长链接。 **约束限制：** 无 **取值范围：** true：开启长链接；false：不开启长链接。 **默认取值：** false                                                                                                                           |
| keep_idle          | int          | 可选       | **参数解释：** 以秒为单位，在连接空闲后，发送keepalive探测之前等待的时间间隔。 **约束限制：** 仅在keep_alive为true时生效。 **取值范围：** 正整数。 **默认取值：** 120（单位：秒）                                                                                                     |
| keep_intvl         | int          | 可选       | **参数解释：** 以秒为单位，设置在发送keepalive探测之间等待的时间间隔。 **约束限制：** 仅在keep_alive为true时生效。 **取值范围：** 正整数。 **默认取值：** 60（单位：秒）                                                                                                      |
| forbid_reuse_tcp   | bool         | 可选       | **参数解释：** 是否禁止重用tcp连接。 **约束限制：** 无 **取值范围：** true：禁止重用；false：允许重用。 **默认取值：** false                                                                                                                                  |
| outgoing_interface | char \*      | 可选       | **参数解释：** 本地出接口（网卡名或IP），NULL表示不绑定。 **约束限制：** 无 **取值范围：** 网卡名（如"eth0"）或本地IP地址（如"192.168.1.100"）。 **默认取值：** NULL                                                                                                        |
| local_port         | unsigned int | 可选       | **参数解释：** 本地源端口。 **约束限制：** 无 **取值范围：** 0表示不绑定，1..65535表示绑定到指定端口。 **默认取值：** 0                                                                                                                                    |
| local_port_range   | unsigned int | 可选       | **参数解释：** 从local_port开始的端口尝试数量。 **约束限制：** local_port_range是尝试数量，不是结束端口号。 **取值范围：** 无 **默认取值：** 1                                                                                                             |
| connect_time       | int          | 可选       | **参数解释：** 建立HTTP/HTTPS连接的超时时间。 **约束限制：** 无 **取值范围：** 建议取值\[10000, 60000\]。 **默认取值：** 60000（单位：毫秒）                                                                                                                   |
| max_connected_time | int          | 可选       | **参数解释：** 整个请求的最大超时时间，包含连接建立和数据传输阶段。 **约束限制：** 0表示不设置超时限制，请求保持连接直到完成。 **取值范围：** 无 **默认取值：** 0（单位：秒）                                                                                                             |
| proxy_host         | char \*      | 可选       | **参数解释：** 代理服务器地址。 **约束限制：** 需要同时设置proxy_host和proxy_auth才可使用代理。代理失败不会自动切换为直连。 **取值范围：** 支持HTTP、HTTPS、SOCKS5代理，格式为"协议://地址:端口"，例如"https://proxy.example.com:8080"、"socks5://proxy.example.com:1080"。 **默认取值：** NULL |
| proxy_auth         | char \*      | 可选       | **参数解释：** 代理认证信息，用于代理服务器的用户身份验证。 **约束限制：** 仅支持Basic认证方式，不支持NTLM、Digest等认证方式。无需认证时不需要设置此参数。 **取值范围：** 格式为"username:password"。 **默认取值：** NULL                                                                         |
   
![](https://support.huaweicloud.com/sdk-c-devg-obs/public_sys-resources/note_3.0-zh-cn.png)
- connect_time 单位为**毫秒** ，max_connected_time 单位为**秒**，请注意区分。
- 如网络状况不佳，建议增大connect_time和max_connected_time的值。
 
#### 代码示例-绑定本地IP或网卡
![](https://support.huaweicloud.com/sdk-c-devg-obs/public_sys-resources/notice_3.0-zh-cn.png)
- outgoing_interface绑定的是本地源地址，不是目标服务地址。常见使用场景：多网卡环境下指定出口网卡、防火墙策略要求流量从指定IP出去。
- 网卡名因平台不同而异：Linux下常见"eth0"、"ens33"等；Windows下常见"以太网"、"Wi-Fi"等中文名称。建议优先使用本地IP地址，兼容性更好
 
```
// 常见场景：多网卡环境指定出口、防火墙要求指定源IP
void example_bind_local_interface(obs_options *obs_options)
{
    // 方法1: 使用本地IP地址（推荐，跨平台兼容）
    obs_options->request_options.outgoing_interface = "192.168.1.100"; // TODO: 替换为实际的本地IP
    // 方法2: 使用网卡名（平台相关）
    // Linux:   "eth0", "ens33"
    // Windows: "以太网", "Wi-Fi"
    // obs_options->request_options.outgoing_interface = "eth0";
}
```
#### 代码示例-绑定本地网卡 + 端口范围
![](https://support.huaweicloud.com/sdk-c-devg-obs/public_sys-resources/notice_3.0-zh-cn.png)
- local_port绑定的是本地源端口，不是目标服务端口。建议使用1024\~65535范围内的端口，避免与系统保留端口（0\~1023）和常见服务端口冲突。绑定1024以下端口可能需要管理员权限。
- 当local_port指定的端口被占用时，SDK会尝试local_port_range范围内的后续端口。若所有端口均被占用，请求将返回连接失败。
- 企业网络环境中，防火墙可能对出站端口有限制，请确保绑定的端口在防火墙允许范围内。
 
```
// 从 local_port 开始，总共尝试 local_port_range 个端口
// 例如：local_port=40000, local_port_range=10 表示依次尝试 40000~40009
void example_bind_interface_and_port_range(obs_options *obs_options)
{
    // 同时指定本地出接口和端口范围
    obs_options->request_options.outgoing_interface = "192.168.1.100"; // TODO: 替换为实际的本地IP
    obs_options->request_options.local_port = 40000;
    obs_options->request_options.local_port_range = 10;  // 依次尝试 40000~40009
}
```
