Python POST请求中如何集成TOTP与HMAC-SHA-512完成身份验证?
解决TOTP生成与HTTP Basic Auth的POST请求问题
原代码核心问题
- 未按要求生成符合RFC6238标准的10位TOTP,直接用固定字符串作为密码
- 手动构造Authorization头易出错,且未使用正确的TOTP作为密码
- 未输出请求响应内容,导致无法排查问题
完整修正代码
首先安装依赖库:
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
相关产品推荐
相关产品推荐

