将Python REST API认证脚本转换为curl命令
我用下面这个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