将Python REST API认证脚本转换为curl命令

1 投票
2 回答
932 浏览
提问于 2025-04-18 03:10

我用下面这个Python脚本成功地登录了一个REST API:

import requests, base64
import json

VendorId = "a"
VendorPassword = "b"
UserId = "c"
UserPassword = "d"
PropertyId = "e"
authurl = "https://url/api/auth"
usrPass = '' + VendorId + ":" + VendorPassword

b64Val = base64.b64encode(usrPass)
payload = { "UserId" : UserId, "UserPassword" : UserPassword, "PropertyId" : PropertyId}
r = requests.post(authurl, headers = {"Authorization":b64Val}, data = payload)

现在我想用curl来实现这个功能(我完全没有经验)。到目前为止,我了解到的内容如下:

curl -H "{'Authorization': 'abCdEfgHijKlmnop=='}" -X POST -v "https://url/api/auth" -d "batch={'PropertyId': 'e', 'UserId': 'c', 'UserPassword': 'd'}";

但是我从REST API那里得到了一个502错误...

如果我不使用头部信息,我会遇到以下错误:

< X-SERVICENAME-Auth-Error: 在HTTP认证头中缺少供应商凭证

我只是想知道我在这里缺少了什么,是头部的语法错了,还是curl的参数放错了地方?

提前感谢任何想法、教程或建议!

2 个回答

1

你已经在Python中解决了这个问题,并写了一个可以成功发送请求的脚本。我建议你从这个脚本开始。因为你只需要发送一次请求,所以比较它们的输出就足够了,特别是对于像HTTP这样简单的协议。

试着修改上面的脚本,向127.0.0.1和一些任意的端口发送请求,像下面这样。根据你喜欢的工具进行调整:

ncat --recv-only -l 8080 > desired &
ncat --recv-only -l 8081 > in_question &
python your_desired_auth_script.py 127.0.0.1 8080
curl 127.0.0.1:8081/api/auth "parameters not resulting in authorization..."
vimdiff desired in_question

只需要修改你的Python脚本,让它接受主机和端口的参数,或者直接在代码里写死这两个值。别忘了请求的路径。如果你没有立刻发现错误,可以用curl重建一模一样的请求,同时查看它的文档。成功后,你可以逐步调整,直到找到造成差异的地方。

1

你的头部设置有问题,应该是:

-H "Authorization: abCdEfgHijKlmnop=="

另外,如果你有授权的用户名和密码,那么你可以使用:

-u user:password

撰写回答