【问题标题】:Convert Python REST API authentication script to curl command将 Python REST API 身份验证脚本转换为 curl 命令
【发布时间】:2014-06-02 03:44:48
【问题描述】:

我已使用以下 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 错误...

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

我只想了解我在这里缺少什么,标题语法是否错误,或者 curl 参数放错了位置?

提前感谢您提供任何想法/教程/建议!

【问题讨论】:

    标签: python api rest post curl


    【解决方案1】:

    你的标题设置错误,会是:

    -H "Authorization: abCdEfgHijKlmnop=="
    

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

    -u user:password
    

    【讨论】:

    • 感谢您的指正!你的建议和我之前的 curl 命令实际上得到了 502 错误。当我不使用标头时出现403错误,请原谅我的误解!我也不能使用服务的api声明它的未编码字符串。我需要使用 base64 编码。
    【解决方案2】:

    您已经在 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 的文档”部分 :)
    • 我会称其为矫枉过正,仅适用于更复杂的问题。对于单个请求,差异输出可以非常快速地定位您。了解当前结果与您的目标之间的差异。
    猜你喜欢
    • 2019-06-15
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 2016-03-20
    • 2013-08-17
    相关资源
    最近更新 更多