
# obs_response_handler
 表1obs_response_handler 
| **参数名称**            | **参数类型**                                                               | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| properties_callback | [obs_response_properties_callback] \* | 必选       | **参数解释：** 响应回调函数指针，可以在这个回调中把[obs_response_properties](https://support.huaweicloud.com/sdk-c-devg-obs/obs_20_0308.html#obs_20_0308__table13287123911192)的内容记录到callback_data（用户自定义回调数据）中。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无 |
| complete_callback   | [obs_response_complete_callback] \*  | 必选       | **参数解释：** 结束回调函数指针，可以在这个回调中把obs_status和obs_error_details的内容记录到callback_data（用户自定义回调数据）中。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                              |
   
 表2obs_response_properties_callback 
| **参数名称**      | **参数类型**                                                             | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                         |
|:---|:---|:---|:---|
| properties    | const [obs_response_properties]\* | 必选       | **参数解释：** 响应头域中的参数，建议将其内容记录到callback_data（用户自定义回调数据）中。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无 |
| callback_data | void \*                                                              | 必选       | **参数解释：** 用户自定义回调数据指针。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                   |
   
 表3obs_response_complete_callback 
| **参数名称**      | **参数类型**                                                    | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                     |
|:---|:---|:---|:---|
| status        | [obs_status]              | 必选       | **参数解释：** SDK内部的请求状态码。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                               |
| error_details | const [obs_error_details]\* | 必选       | **参数解释：** 请求失败的错误详情，包含错误消息、资源信息等，建议将其内容记录到callback_data（用户自定义回调数据）中。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无 |
| callback_data | void \*                                                     | 必选       | **参数解释：** 用户自定义回调数据指针。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                        |
   
 表4obs_response_properties 
| **参数名称**                   | **参数类型**                                                   | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
|:---|:---|:---|:---|
| request_id                 | const char \*                                              | 可选       | **参数解释：** 由OBS创建来唯一确定本次请求的值，可以通过该值来定位问题。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| request_id2                | const char \*                                              | 可选       | **参数解释：** 帮助定位问题的特殊符号。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| content_type               | const char \*                                              | 可选       | **参数解释：** 对象的文件类型（MIME类型）。Content-Type（MIME）用于标识发送或接收数据的类型，浏览器根据该参数来决定数据的打开方式。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| content_length             | uint64_t                                                   | 可选       | **参数解释：** 响应消息体的字节长度。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| server                     | const char \*                                              | 可选       | **参数解释：** 请求中的Server头域。 **约束限制：** 无 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| etag                       | const char \*                                              | 可选       | **参数解释：** 对象的base64编码的128位MD5摘要。ETag是对象内容的唯一标识，可以通过该值识别对象内容是否有变化。比如上传对象时ETag为A，下载对象时ETag为B，则说明对象内容发生了变化。ETag只反映变化的内容，而不是其元数据。上传的对象或复制操作创建的对象，都有唯一的ETag。 **约束限制：** 当对象是服务端加密的对象时，ETag值不是对象的MD5值。 **取值范围：** 长度为32的字符串。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                           |
| expiration                 | const char \*                                              | 可选       | **参数解释：** 对象的详细过期信息。 **约束限制：** 无 **取值范围：** ISO 8601 格式的时间字符串，如"Web, 7 Nov 2012 00:00:00 GMT"。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| website_redirect_location  | const char \*                                              | 可选       | **参数解释：** 当桶设置了Website配置，就可以设置对象元数据的这个属性，Website接入点返回301重定向响应，将获取这个对象的请求重定向到该属性指定的桶内另一个对象或一个外部的URL，该参数指明对象的重定向地址。 例如，重定向请求到桶内另一对象： x-obs-website-redirect-location:/anotherPage.html 或重定向请求到一个外部URL： x-obs-website-redirect-location:http://www.example.com/ OBS将这个值从头域中取出，保存在对象的元数据"WebsiteRedirectLocation"中。 **约束限制：** - 必须以"/"、"http://"或"https://"开头，长度不超过2KB。  - OBS仅支持为桶根目录下的对象设置重定向，不支持为桶中文件夹下的对象设置重定向。   **默认取值：** 无 |
| version_id                 | const char \*                                              | 可选       | **参数解释：** 对象的版本号。如果该对象无版本号，则为NULL。 **约束限制：** 长度为32的字符串。 **取值范围：** 无 **默认取值**： 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| meta_data_count            | int                                                        | 可选       | **参数解释：** meta_data数组中的元素个数。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| meta_data                  | const [obs_name_value] \* | 可选       | **参数解释：** 对象的自定义元数据。OBS支持用户使用以"x-obs-meta-"开头的消息头来加入自定义的元数据，以便对对象进行自定义管理。当用户获取此对象或查询此对象元数据时，加入的自定义元数据将会在返回的消息头中出现。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| use_server_side_encryption | char                                                       | 可选       | **参数解释：** 如果开启了服务端加密，会被置为'\\1'。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| allow_origin               | const char \*                                              | 可选       | **参数解释：** 当桶设置了CORS配置，如果请求中的Origin满足服务端的CORS配置，则在响应中包含这个Origin。 **约束限制：** 无 **取值范围：** 符合CORS协议的取值范围。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| allow_headers              | const char \*                                              | 可选       | **参数解释：** 当桶设置了CORS配置，如果请求的headers满足服务端的CORS配置，则在响应中包含这个headers。 **约束限制：** 最多可填写一个"\*"通配符，不支持\&、:、\<、空格以及中文字符。 **取值范围：** 符合CORS协议的取值范围。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| max_age                    | const char \*                                              | 可选       | **参数解释：** 桶CORS规则中的MaxAgeSeconds。MaxAgeSeconds指请求来源的客户端可以对跨域请求返回结果的缓存时间。 **约束限制：** 每个CORSRule可以包含至多一个MaxAgeSeconds。 **取值范围：** 大于等于0的整型数，单位：秒。 **默认取值：** 3000                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| allow_methods              | const char \*                                              | 可选       | **参数解释：** 当桶设置了CORS配置，如果请求的Access-Control-Request-Method满足服务端的CORS配置，则在响应中包含这条rule中的Methods。 **约束限制：** 无 **取值范围：** - GET  - PUT  - HEAD  - POST  - DELETE   **默认取值：** 无                                                                                                                                                        |
| expose_headers             | const char \*                                              | 可选       | **参数解释：** 桶CORS规则中的ExposeHeader。ExposeHeader是指CORS规则允许响应中可返回的附加头域，给客户端提供额外的信息。默认情况下浏览器只能访问以下头域：Content-Length、Content-Type，如果需要访问其他头域，需要在附加头域中配置。 **约束限制：** 不支持\*、\&、:、\<、空格以及中文字符。 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| storage_class              | const char \*                                              | 可选       | **参数解释：** 对象的存储类别。 **约束限制：** 仅当对象为非标准存储类别时，会返回此头域。 **取值范围：** - WARM（指低频存储）  - COLD（指归档存储）  - DEEP_ARCHIVE（指深度归档存储）   **默认取值：** 无                                                                                                                                                                                                         |
| server_side_encryption     | const char \*                                              | 可选       | **参数解释：** 该头域表示服务端的加密方式。 示例：x-obs-server-side-encryption：kms。 **约束限制：** 如果服务端加密是SSE-KMS方式，响应包含该头域。 **取值范围：** - kms（指SSE-KMS加密方式）  - obs（指SSE-OBS加密方式）   **默认取值：** 无                                                                                                                                                                                                                                                                                                                              |
| kms_key_id                 | const char \*                                              | 可选       | **参数解释：** 密钥ID。当加密方式为SSE-KMS且使用指定密钥加密时，需输入密钥ID。 **约束限制：** 当您设置了server_side_encryption且赋值为"kms"，即选择kms加密方式时，才能使用该头域指定加密密钥。 **默认取值：** 当您选择使用kms加密方式，但未设置此头域时，默认的主密钥将会被使用。如果默认主密钥不存在，系统将默认创建并使用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| customer_algorithm         | const char \*                                              | 可选       | **参数解释：** 如果服务端加密是SSE-C方式，响应包含该头域，该头域表示解密使用的算法。 **约束限制：** 无 **取值范围：** AES256（指AES256解密算法） **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| customer_key_md5           | const char \*                                              | 可选       | **参数解释：** 如果服务端加密是SSE-C方式，响应包含该头域，该头域表示解密使用的密钥的MD5值。 **约束限制：** 由密钥值经过MD5加密再经过Base64编码后得到，示例：4XvB3tbNTN+tIEVa0/fGaQ==。 **取值范围：** 密钥ID MD5的base64值。 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| bucket_location            | const char \*                                              | 可选       | **参数解释：** 桶的区域位置信息。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| obs_version                | const char \*                                              | 可选       | **参数解释：** 桶所在的OBS服务版本号。 **约束限制：** 无 **取值范围：** - 3.0：最新版本的桶。  - --：表示老版本的桶。   **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| restore                    | const char \*                                              | 可选       | **参数解释：** 标识对象的恢复状态。 示例：正在恢复ongoing-request="true"；已恢复 ongoing-request="false", expiry-date="Wed, 7 Nov 2012 00:00:00 GMT"。其中expiry-date表示对象恢复后的失效时间。 **约束限制：** 仅当对象为归档存储或深度归档存储类别，并且处于正在恢复或已经恢复时，会返回此头域。 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                          |
| obs_object_type            | const char \*                                              | 可选       | **参数解释：** 对象的类型。 **约束限制：** 仅当对象为非Normal对象时，会返回此头域。 **取值范围：** Appendable **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| obs_next_append_position   | const char \*                                              | 可选       | **参数解释：** 指明下一次请求应该提供的position。 **约束限制：** 仅当对象为Appendable对象时，会返回此头域。 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| obs_head_epid              | const char \*                                              | 可选       | **参数解释：** 当前桶的企业项目ID，开通企业项目的用户可以从企业项目服务获取。 **约束限制：** 格式为uuid，未开通企业项目的用户可以不带该头域。 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| reserved_indicator         | const char \*                                              | 可选       | **参数解释：** 帮助定位问题的特殊符号。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   
 表5obs_error_details 
| **参数名称**            | **参数类型**                                            | **是否必选** | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
|:---|:---|:---|:---|
| message             | const char\*                                        | 可选       | **参数解释：** 错误响应消息体XML中具体错误更全面、详细的英文解释。 **约束限制：** 无 **取值范围：** 取值范围可参见[错误码](https://support.huaweicloud.com/api-obs/obs_04_0115.html)。 **默认取值：** 无 |
| resource            | const char\*                                        | 可选       | **参数解释：** 该错误相关的桶或对象资源。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                              |
| further_details     | const char\*                                        | 可选       | **参数解释：** 错误响应消息体XML中的FurtherDetails元素的值。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                       |
| extra_details_count | int                                                 | 可选       | **参数解释：** 错误响应消息体XML中的其他元素的数量。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                       |
| extra_details       | [obs_name_value]\* | 可选       | **参数解释：** 错误响应消息体XML中的其他元素的值。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                        |
| error_headers_count | int                                                 | 可选       | **参数解释：** error_headers的头域数量。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                        |
| error_headers       | char\*\*                                            | 可选       | **参数解释：** 响应头域中包含error的所有头域。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无                                                                                                                                                                                          |
   
 表6obs_name_value 
| **参数名称** | **参数类型** | **是否必选** | **描述**                                                                                                                                                                                                                                                                  |
|:---|:---|:---|:---|
| name     | char \*  | 可选       | **参数解释：** 属性的键。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无  |
| value    | char \*  | 可选       | **参数解释：** 属性的值。 **约束限制：** 无 **取值范围：** 无 **默认取值：** 无 |
   
 表7obs_status 
| **常量名**                               | **原始值** | **说明**                                                                                    |
|:---|:---|:---|
| OBS_STATUS_OK                         | 0       | 请求成功。                                                                                     |
| OBS_STATUS_InitCurlFailed             | 1       | 初始化curl失败。                                                                                |
| OBS_STATUS_InternalError              | 2       | 内部错误。                                                                                     |
| OBS_STATUS_OutOfMemory                | 3       | 本地环境内存不足。                                                                                 |
| OBS_STATUS_FailedToIInitializeRequest | 6       | 初始化请求失败。                                                                                  |
| OBS_STATUS_XmlParseFailure            | 23      | xml解析失败。                                                                                  |
| OBS_STATUS_NameLookupError            | 33      | 域名解析失败。                                                                                   |
| OBS_STATUS_FailedToConnect            | 34      | 无法连接到服务端。                                                                                 |
| OBS_STATUS_ConnectionFailed           | 36      | 网络连接失败。                                                                                   |
| OBS_STATUS_PartialFile                | 38      | 网络传输中断。                                                                                   |
| OBS_STATUS_InvalidParameter           | 39      | 参数非法。                                                                                     |
| OBS_STATUS_NoToken                    | 40      | 当前并发数已经超过最大并发数（默认值1000）。此处的Token指并发请求令牌，非安全认证令牌。可通过set_online_request_max_count函数调整最大并发数。 |
| OBS_STATUS_OpenFileFailed             | 41      | 打开文件失败。                                                                                   |
| OBS_STATUS_AccessDenied               | 43      | 请求被拒绝。                                                                                    |
| OBS_STATUS_MalformedPolicy            | 44      | 请求policy格式不正确。                                                                            |
| OBS_STATUS_MalformedXML               | 45      | 请求xml格式不正确。                                                                               |
| OBS_STATUS_MethodNotAllowed           | 46      | 请求方法不允许。                                                                                  |
| OBS_STATUS_SignatureDoesNotMatch      | 47      | 签名不匹配，检查ak、sk、token是否对应或有误。                                                               |
| OBS_STATUS_ServiceUnavailable         | 48      | 服务端异常。                                                                                    |
| OBS_STATUS_SlowDown                   | 49      | 请求频率过快。                                                                                   |
   
