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:请求体是 JSONX-Auth-Token:华为云 IAM 的认证 tokenX-WEAUTOMATE-TOKEN:镜像/自动化相关 token
返回:
return headers
调用方直接用这个 headers 去请求其他华为云接口。

浙公网安备 33010602011771号