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

如何将指定Bash Curl请求转为Python代码?请求返回401错误

解决Selectel认证令牌请求401错误的问题

你的Python代码存在两个核心问题,直接导致服务器返回401未授权:

  • 请求方法错误:原curl命令通过-d参数发送数据时,会自动将请求方法切换为POST,但你使用了requests.get()发送GET请求,服务器无法接收到认证所需的请求体数据。
  • 参数传递方式错误:你把认证数据放在params参数中,这会将数据拼接为URL查询字符串,而原curl是将JSON数据放在请求体里发送的,正确做法是使用json参数传递。

另外注意变量名拼写规范:PARAMETRES建议改为PARAMETERS;headers中的Content-type最好改成Content-Type,和原curl的请求头保持一致(虽然多数服务器兼容小写,但规范写法更稳妥)。

修正后的代码:

import requests

# 确保以下变量已正确赋值
USER_NAME = "你的用户名"
ID_SELECTEL = "你的域名"
PASSWORD = "你的密码"
PROJECT_NAME = "你的项目名"
DATA_URL = "https://api.selvpc.ru/identity/v3/auth/tokens"

PARAMETERS = {
    "auth": {
        "identity": {
            "methods": ["password"],
            "password": {
                "user": {
                    "name": USER_NAME,
                    "domain": {
                        "name": ID_SELECTEL
                    },
                    "password": PASSWORD
                }
            }
        },
        "scope": {
            "project": {
                "name": PROJECT_NAME,
                "domain": {
                    "name": ID_SELECTEL
                }
            }
        }
    }
}

# 改用POST请求,通过json参数传递认证数据
response = requests.post(DATA_URL, json=PARAMETERS)
print(response.status_code)

# 成功时提取返回的令牌
if response.status_code == 201:
    token = response.headers.get('X-Subject-Token')
    print("获取到的认证令牌:", token)
else:
    print("错误详情:", response.text)

补充说明:使用json参数时,requests会自动添加Content-Type: application/json请求头,因此可以省略手动定义的HEADERS。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:28:12