Delphi Datasnap RESTful API方法可以在浏览器中使用,但不能在python中与POST一起使用

2024-06-26 14:58:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉web开发,尤其是REST。 我试图从以下链接获取用户数据,该链接是在Delphi中使用Datasnap构建的REST服务: http://XXXXXX:XXX/datasnap/rest/Tdm/LoginUser

我无法访问该服务的后端(或其任何代码),但是我仍然需要弄清楚如何使用它

您可以在浏览器中实际使用它,如下所示: http://XXXXX:XXX/datasnap/rest/Tdm/LoginUser/ANY_STRING/EMAIL@EMAIL.COM/PASSWORD

它工作得很好,打印一个JSON响应,其中包含所有用户数据

现在,我正试图做同样的事情,但这次是通过Python中的请求库进行POST请求。下面是有问题的代码部分:

import requests
import json

task = {
    'FAppKey':'test', 
    'Email':'REDACTED :)', 
    'Password':'12345' 
    }
header = {
    'Content-Type': 'application/json; charset=utf-8', 
    'Connection': 'keep-alive', 
    'Accept': 'text/html', 
    'Accept-Encoding': 'identity'
    }

response = requests.post('http://XXXXX:XXXX/datasnap/rest/Tdm/LoginUser/', 
    json=json.dumps(task), 
    headers=header)
print(response, response.text)

如您所见,我正试图发送一个POST请求,其中包含JSON对象以及我想要查看的特定用户的数据。然而,这是行不通的。print语句返回以下内容:

{"error":"Tdm.updateLoginUser method not found in the server method list"}

这很奇怪,因为API中确实没有称为“updateLoginUser”的方法

我确信datasnap和LoginUser方法的配置是正确的,我遇到的问题来自我这边

我做错了什么?如何正确地发布到RESTAPI?为什么Datasnap会打印引用另一个不存在的方法的错误

编辑: 修好了

两件事:

  • 使用POST时,DataSnap会自动将“update”附加到方法名(因此“Foo”变为“updateFoo”),希望您在其中有一个方法。如果没有,则必须将方法名称用引号括起来,当然在URL编码中,引号是“%22”
  • 当您通过POST在JSON中传递多个参数时,您必须将每个参数放入一个列表/数组中,然后将该列表放入一个dict中,并使用键“\u parameters”,如下所示:
task = { "_parameters" : ["param1", "param2", "param3"] }

所有这些的文档都可以在here中找到


Tags: 数据方法用户restjsonhttptask链接