从python发送POST请求到Wix吗?

问题描述

我当前正在尝试将python tkinter GUI的POST请求发送到免费的wix网站。我已经发送了几个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"
  }
}

UPDATE#2

使用json.dumps可以达到目的!

解决方法

找出实际的错误消息可能会有所帮助。在python脚本中,您仅打印状态代码。知道由.catch((error) => { ... })捕获并由options.body = { error: error }发送的错误响应 可能会为您(和我们)提供一些有关正在发生的事情的线索。

还请注意,发送“服务器错误”并非总是有意义的,也就是说,当问题确实出在请求而非服务器端时。了解错误消息(从而可能是导致错误的原因)将有助于您发送适当的响应和状态代码。

在不知道任何其他错误消息信息的情况下,我想知道您是如何处理该请求的。您确定可以通过使用python发送的请求中的request.body.text()和/或JSON.parse来解析请求吗? python request模块有可能不会以与Postman相同的方式来序列化数据。

希望我所说的内容会有所帮助。如果您碰巧对上面发布的内容进行了任何更新,我将继续关注。祝你好运!

更新

在看到您的响应错误后,在我看来您可能未正确处理请求。如前所述,Postman的序列化对象可能与python请求不同。

尝试使用request.post(url,data=json.dumps(data))

同样,您确定可以从request.body.text()方法检索数据吗?我不确定服务器端使用的是哪种http框架,但是如果request.body.text()实际上无法返回任何数据,则可能会将undefined传递给您的第一个诺言处理程序{{1 }}。由于您的错误是JsonSyntaxError,因此.then((body) => { ... })可能实际上无法解析其尝试解析的内容,无论是JSON.parse还是无效的JSON字符串。