将Python REST API身份验证脚本转换为curl命令

将Python REST API身份验证脚本转换为curl命令,python,api,rest,post,curl,Python,Api,Rest,Post,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 = base

我使用以下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 -H "{'Authorization': 'abCdEfgHijKlmnop=='}" -X POST -v "https://url/api/auth" -d "batch={'PropertyId': 'e', 'UserId': 'c', 'UserPassword': 'd'}";
但是我从RESTAPI中得到以下502错误

如果不使用标题,则会出现以下错误:

我只是想了解一下我在这里遗漏了什么,标题语法是错误的,还是curl参数放错了位置


提前感谢您的任何想法/指导/建议

您的标题设置错误,它将是:

-H "Authorization: abCdEfgHijKlmnop=="
此外,如果您拥有授权用户:密码,则可以使用:

-u user:password

您已经在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重新构造确切的请求。成功后,您可以逐渐偏离,直到您找到导致偏离的原因。

感谢您的纠正!实际上,我在你的建议和之前的curl命令中遇到了一个502错误。403错误出现在我不使用标题时,抱歉误解!此外,我不能使用服务api声明的未编码字符串。我需要使用base64编码。这是一种相当过分的方法,但仍然是一种有趣的方法,我将尝试“read curl’s documentation”部分:)我只会将其称为过度使用,用于更复杂的问题。对于单个请求,diff输出可以非常快速地确定方向。了解当前结果与目标之间的差异。