从 Python 向 Wix 发送 POST 请求?

问题描述 投票:0回答:2

我目前正在尝试从 python tkinter GUI 向 wix 免费网站发送 POST 请求。我已经发送了几个 GET 请求并且成功了。但无论我做什么,POST 请求都会产生 500 内部服务器错误。这是我的wix后端的http-functions.js的代码。


export function post_posFunc(request) {
  let options = {
    "headers":{
      "Content-Type":"application/json"
    }
  };
  return request.body.text()
    .then((body) =>{
      return wixData.insert("vidinfo", JSON.parse(body));

    })
    .then((results)=> {
      options.body={
        "inserted":results
      };
      return created(options)
    })
    .catch((error) =>{
      options.body = {
        "error":error
      };
      return serverError(options)
    });
}

在我的 tkinter 应用程序上,我传递视频的名称、大小和类以及 userId,代码如下

def runPost(a,b,c,d,e,f):

   
    
    url = 'https://###.wixsite.com/###/_functions/posFunc/'
    myobj = {
    "vidUserId":a,
    "videoName":b,
    "videoSize":c,
    "videoClass":d
    }

    z = requests.post(url, data=myobj)
    print(json.dumps(data, indent=2, sort_keys=True))
    print("done with post")

我已经和邮递员一起尝试过,并且成功了。如您所见,vidinfo 中的字段显示在上方。我已经审查了该网站的名称,因为有人告诉我发布私人信息违反规则,但如果允许我发布它,请告诉我。我的代码有什么问题吗?

更新

设法捕获并打印错误。更新了上面的代码并添加了下面的错误

{
  "error": {
    "errorGroup": "User",
    "name": "JsonSyntaxError"
  }
}

更新#2

使用 json.dumps 就成功了!

python post postman velo
2个回答
1
投票

找出实际的错误消息可能会有所帮助。在 python 脚本中,您仅打印状态代码。了解用

.catch((error) => { ... })
捕获并用
options.body = { error: error }
发送的错误响应 可能会给您(和我们)更多关于正在发生的事情的线索。

另请注意,发送“服务器错误”并不总是有意义,即当问题确实在于请求而不是服务器端时。了解错误消息(以及可能导致错误的原因)将帮助您发送适当的响应和状态代码。 在不知道任何进一步的错误消息信息的情况下,我想知道您处理请求的方式是否导致了问题。您确定可以使用 python 发送的请求中的

request.body.text()

和/或

JSON.parse
来解析请求吗? python requests 模块可能不会像 Postman 那样序列化数据。
希望我说的能对你有所帮助。如果您对上面发布的内容进行任何更新,我将继续关注。祝你好运!!

更新 看到您的响应错误后,我认为您可能错误地处理了请求。正如我上面所说,Postman 可能会以不同于 python 请求的方式序列化对象。

尝试使用

request.post(url, data=json.dumps(data))

再次,您确定可以从 request.body.text() 方法中检索数据吗?我不确定服务器端使用的是什么 http 框架,但如果 request.body.text() 实际上无法返回任何数据,它可能会将 

undefined

传递给您的第一个承诺处理程序

.then((body) => { ... })
。由于您的错误是 JsonSyntaxError,因此
JSON.parse
可能无法实际解析它尝试解析的内容,无论是
undefined
还是无效的 JSON 字符串。
    


0
投票
final response = await http.post( Uri.parse("endpoint"), body: json.encode(body),// encode the body );

它有效!

© www.soinside.com 2019 - 2024. All rights reserved.