You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python POST请求中如何集成TOTP与HMAC-SHA-512完成身份验证?

解决TOTP生成与HTTP Basic Auth的POST请求问题

原代码核心问题

  1. 未按要求生成符合RFC6238标准的10位TOTP,直接用固定字符串作为密码
  2. 手动构造Authorization头易出错,且未使用正确的TOTP作为密码
  3. 未输出请求响应内容,导致无法排查问题

完整修正代码

首先安装依赖库:

pip install pyotp requests

替换占位符后的可用代码:

import requests
import pyotp

# 替换为实际的API地址、Gist链接和邮箱
API_URL = 'https://api.url.com'
GIST_URL = 'https://gist.github.com/gist-url'
CONTACT_EMAIL = "your-actual-email@example.com"
SHARED_SECRET_SUFFIX = "STRING"

# 1. 构造请求体
payload = {
    "github_url": GIST_URL,
    "contact_email": CONTACT_EMAIL,
    "solution_language": "python"
}

# 2. 生成符合要求的TOTP
shared_secret = CONTACT_EMAIL + SHARED_SECRET_SUFFIX
# 严格匹配需求:HMAC-SHA512哈希、30秒时间步长、10位数字、起始时间T0=0
totp = pyotp.TOTP(
    shared_secret,
    interval=30,
    digits=10,
    digest=pyotp.hmac.HMAC_SHA512,
    initial_time=0
)
current_totp = totp.now()

# 3. 发送POST请求,自动处理认证和请求头
response = requests.post(
    API_URL,
    json=payload,  # 自动设置Content-Type为application/json
    auth=requests.auth.HTTPBasicAuth(CONTACT_EMAIL, current_totp)
)

# 4. 打印响应结果,排查问题
print(f"响应状态码: {response.status_code}")
print(f"响应内容: {response.text}")

关键步骤解释

  • TOTP生成:用pyotp.TOTP类严格匹配规则,确保共享密钥、哈希算法、时间步长、位数完全符合要求
  • HTTP Basic Auth:直接使用requests内置的HTTPBasicAuth类,无需手动编码Authorization头,避免编码错误
  • 请求体处理:通过json=payload参数自动完成JSON序列化并设置正确的Content-Type头,简化代码
  • 响应排查:打印状态码和响应文本,能直观看到请求是否成功、错误原因,方便调试

内容的提问来源于stack exchange,提问作者bellamella

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 18:41:00