get_headers.py

1. 整体概述

进程启动或请求前,先同步获取一次华为云 token,然后把它和镜像 token 拼成请求头,用于后续所有接口调用。


2. def return_token()

# 由于一个进程只需要获取一次token,所以不做异步
# 风险点就是如果获取token的时间很长,进程在推理之前就会阻塞
def return_token(auth_info, url):
    # 发送POST请求获取Token
    response = requests.post(url, headers={"Content-Type": "application/json;charset=utf8"}, data=json.dumps(auth_info),verify=False)
    
    code = response.status_code
    if code == 201:       
        token = response.headers.get("X-Subject-Token")
        process_logger.info("[PROCESS] get huawei-cloud token success.")
        return token          
    else:
        raise Exception(f"[PROCESS] get huawei-cloud token FAILED! code:{code}, response:{response.json()}")

作用:向华为云认证接口发请求,拿 token。

response = requests.post(
    url,
    headers={"Content-Type": "application/json;charset=utf8"},
    data=json.dumps(auth_info),
    verify=False
)
  • 用 POST 请求
  • 请求体是 auth_info,转成 JSON
  • verify=False 表示不校验证书,一般是内网或特殊环境才这么用
code = response.status_code

拿到 HTTP 状态码。

if code == 201:

华为云获取 token 成功时返回 201。

token = response.headers.get("X-Subject-Token")
  • 华为云的 token 不在返回体里
  • 在响应头 X-Subject-Token
process_logger.info("[PROCESS] get huawei-cloud token success.")
return token
  • 记一条日志
  • 把 token 返回给调用方

如果不是 201:

raise Exception(
    f"[PROCESS] get huawei-cloud token FAILED! "
    f"code:{code}, response:{response.json()}"
)
  • 直接抛异常
  • 进程会停下来
  • 错误信息里包含状态码和返回内容

3. def get_headers()

def get_headers():
    # 获取华为云token
    token = return_token(settings.AUTH_INFO, settings.TOKEN_URL)
    # 获取镜像token(由镜像esn生成)
    image_token = settings.IMAGE_TOKEN

    headers = {
        "Connection":"close",
        'Content-Type': 'application/json',
        'X-Auth-Token': token,
        "X-WEAUTOMATE-TOKEN": image_token
    }
    
    return headers

作用:生成一个完整的请求头字典。

token = return_token(settings.AUTH_INFO, settings.TOKEN_URL)
  • 调用函数return_token,用配置里的认证信息和 token 地址,获取华为云token
image_token = settings.IMAGE_TOKEN
  • 获取镜像token(由镜像esn生成)
headers = {
    "Connection": "close",
    "Content-Type": "application/json",
    "X-Auth-Token": token,
    "X-WEAUTOMATE-TOKEN": image_token
}

组装请求头:

  • Connection: close:用完就关连接,避免长连接问题
  • Content-Type:请求体是 JSON
  • X-Auth-Token:华为云 IAM 的认证 token
  • X-WEAUTOMATE-TOKEN:镜像/自动化相关 token

返回:

return headers

调用方直接用这个 headers 去请求其他华为云接口。

posted @ 2026-01-05 08:50  做梦当财神  阅读(4)  评论(0)    收藏  举报