Python3 requests请求失败但等价curl命令正常运行的问题
问题排查与解决方案
核心可能原因:手动输入的磁盘名存在隐藏空白字符
你的curl命令里磁盘名是"dbdisk01",但Python脚本中手动输入磁盘名时没有去除前后空白字符(读取文件时做了strip()处理,但手动输入分支遗漏了)。如果输入时不小心带了空格、制表符等,就会导致API收到的磁盘名和curl请求不一致,触发"无法识别磁盘名"的错误。
快速修复方案
修改手动输入磁盘名的代码,添加strip()去除空白字符:
else: volumes = [input("Enter volume name: ").strip()]
进一步排查步骤
如果修复后仍有问题,需要对比Python脚本和curl发送的请求细节,确认完全一致:
打印生成的JSON payload,确认和curl的参数完全匹配:
在创建json_payload后添加以下代码,输出结构化的payload:import json print("Generated payload:") print(json.dumps(json_payload, indent=2))对比curl里的
-d参数,检查每个字段(尤其是disks数组)的内容是否完全一致。查看requests发送的实际请求细节,开启调试日志:
在脚本开头添加日志配置,查看完整的请求头和body:import logging import http.client http.client.HTTPConnection.debuglevel = 1 logging.basicConfig() logging.getLogger().setLevel(logging.DEBUG) requests_log = logging.getLogger("requests.packages.urllib3") requests_log.setLevel(logging.DEBUG) requests_log.propagate = True运行脚本后,对比curl的
-vv输出,检查请求头、Content-Type、payload内容是否完全一致。直接复制curl的payload到Python中测试,排除输入逻辑问题:
暂时替换动态生成的payload为curl里的固定内容,验证API调用是否正常:json_payload = { "projectName": "dbdisk01", "siteName": "EMEA", "disks": [ "dbdisk01" ], "emailAddress": "dbinfo@somedomain.com" }如果这样能成功,说明问题出在用户输入的处理逻辑上,再回头检查输入读取的代码。
内容的提问来源于stack exchange,提问作者user2023
相关产品推荐
相关产品推荐

