
# 自定义头域(HarmonyOS SDK)
#### 功能说明
OBS HarmonyOS SDK 支持在发起请求时携带自定义 HTTP 头域。通过请求参数中传入ExtensionHeaders 字段设置，所有操作（PUT/GET/DELETE/LIST 等）均支持。
#### 接口约束
- 以 x-obs- 开头的头域名称会自动转为小写，并参与请求签名计算
- 其他头域保持原始大小写，仅作为 HTTP 头发送，不参与签名
 
#### 方法定义
```
type ExtensionHeaders = Record<string, string>;
```
#### 参数说明
表1ExtensionHeaders 
| **参数名称**         | **参数类型**                 | **是否必选** | **描述**                                                          |
|:---|:---|:---|:---|
| ExtensionHeaders | Record\<string, string\> | 可选       | **参数解释：** 按请求传入的自定义头域，为头域名到头域值的映射。 |
   
#### 代码示例
本示例在上传对象时传入 ExtensionHeaders
```
// 引入依赖包
import ObsClient, { PutObjectInput } from '@obs/esdk-obs-harmony';
import { process } from '@kit.ArkTS';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
const processManager = new process.ProcessManager();
// 创建ObsClient实例
const obsClient = new ObsClient({
  // 推荐通过环境变量获取AKSK，这里也可以使用其他外部引入方式传入，如果使用硬编码可能会存在泄露风险
  // 您可以登录访问管理控制台获取访问密钥AK/SK，获取方式请参见https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html
  AccessKeyId: processManager.getEnvironmentVar("ACCESS_KEY_ID"),
  SecretAccessKey: processManager.getEnvironmentVar("SECRET_ACCESS_KEY"),
  // 【可选】如果使用临时AK/SK和SecurityToken访问OBS，同样建议您尽量避免使用硬编码，以降低信息泄露风险。您可以通过环境变量获取访问密钥AK/SK，也可以使用其他外部引入方式传入
  // SecurityToken: processManager.getEnvironmentVar("SECURITY_TOKEN"),
  // Server填写Bucket对应的Endpoint, 这里以华北-北京四为例，其他地区请按实际情况填写
  Server: "https://obs.cn-north-4.myhuaweicloud.com",
});
async function putObject() {
  try {
    const params: PutObjectInput = {
      // 指定存储桶名称
      Bucket: "examplebucket",
      // 指定对象，此处以 example/objectname 为例
      Key: "example/objectname",
      // 指定上传内容
      Body: 'Hello OBS',
      ExtensionHeaders: {
         "x-obs-meta-author": "test-user",   // 参与签名
         "X-Custom-Header": "custom-value",    // 不参与签名，原值透传
      },
    };
    // 上传对象
    const result = await obsClient.putObject(params);
    if (result.CommonMsg.Status < 300) {
      hilog.info(0x0001, 'OBS-Harmony', "Put object(%s) under the bucket(%s) successful!!", params.Key, params.Bucket);
      hilog.info(0x0001, 'OBS-Harmony', "RequestId: %s", result.CommonMsg.RequestId);
      hilog.info(0x0001, 'OBS-Harmony', "StorageClass:%s, ETag:%s", result.InterfaceResult.StorageClass, result.InterfaceResult.ETag);
      return;
    }
    hilog.error(0x0001, 'OBS-Harmony', "An ObsError was found, which means your request sent to OBS was rejected with an error response.");
    hilog.error(0x0001, 'OBS-Harmony', "Status: %d", result.CommonMsg.Status);
    hilog.error(0x0001, 'OBS-Harmony', "Code: %s", result.CommonMsg.Code);
    hilog.error(0x0001, 'OBS-Harmony', "Message: %s", result.CommonMsg.Message);
    hilog.error(0x0001, 'OBS-Harmony', "RequestId: %s", result.CommonMsg.RequestId);
  } catch (error) {
    const err = error as BusinessError;
    hilog.error(0x0001, 'OBS-Harmony', 'An Exception occurred: code=%d, message: %s', err.code, err.message);
  }
}
putObject();
```
