【问题标题】:Post request works from postman but not from python发布请求适用于邮递员,但不适用于 python
【发布时间】:2021-10-06 22:19:37
【问题描述】:

当我从邮递员运行此脚本时,它成功发布到 gettr,但是当我使用邮递员给我的脚本在 pycharm 中运行它时,它给了我错误。

{"_t":"xresp","rc":"ERR","error":{"_t":"xerr","code":"E_RES_NOACCESS","emsg":"empty post","args":[]}}"

这是我在邮递员中运行代码但没有正文表单数据时得到的相同错误代码,无论我做什么我似乎都无法修复它,我尝试重命名有效负载,更改最大数量我认为这可能是问题所在,并且对有效负载进行了 json 编码。 有效载荷没有被发送到服务器,其他一切都是,但有效载荷没有,我不知道为什么。

这是邮递员给我的代码

import requests

url = "https://api.gettr.com/u/post"

payload={'content': '{"data":{"udate":1627766410444,"acl":{"_t":"acl"},"_t":"post","cdate":1627766410444,"txt":"TEST2","uid":"nseruame2"},"aux":null,"serial":"post"}'}
files=[

]
headers = {
        'authority': 'api.gettr.com',
        'x-app-url': 'https://gettr.com',
        'enctype': 'multipart/form-data',
        'x-app-auth': '{"user":"nseruame2","token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJuc2VydWFtZTIiLCJsZXZlbCI6MCwiaWF0IjoxNjI3NzY1NTU3LCJleHAiOjE2MzI5NDk1NTd9.x5WfCL2ts9ZPRPfrXoRsx8Ht9_Qwvu8a6Z0LsST2c-Q"}',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.115 Safari/537.36',
        'content-type': 'multipart/form-data; boundary=----WebKitFormBoundarylT5AFlKSBTmaMSRX',
        'sec-gpc': '1',
        'origin': 'https://gettr.com',
        'sec-fetch-site': 'same-site',
        'sec-fetch-mode': 'cors',
        'sec-fetch-dest': 'empty',
        'referer': 'https://gettr.com/',
        'accept': '*/*',
        'accept-language': 'en-US,en;q=0.9'
}

response = requests.request("POST", url, headers=headers, data=payload, files=files)

print(response.text)

我做错了什么导致了这个错误,我该如何解决。

E_RES_NOACCESS 意味着它没有获得身份验证令牌,服务器没有获取有效负载,因为错误代码表明它缺少存储在有效负载中的所有关键内容。

【问题讨论】:

  • 该有效载荷是否需要进行 JSON 编码?如果是这样,您应该使用json=payload,而不是data=payload
  • 我建议您查看 API 文档以准确了解 E_RES_NOACCESS 的含义。我的猜测是您的 x-app-auth 令牌无效
  • 我尝试对有效负载进行 json 编码,但没有成功,同样的错误代码,它不发送有效负载,它发送文件和标头,但不发送有效负载,我'不知道为什么。
  • 您的“minimal reproducible example”没有显示您在files=files 中输入的值 - 这是什么样的?您是否跟踪了邮递员的 POST 并请求使用例如查看差异Telelrik 提琴手?另外,你得到什么http错误代码?如果您的浏览器在请求中发送身份验证 cookie(即不是从 Python 发送的),您是否与 Postman 确认过?
  • files=files 是空的,它也没有被发送,所以我可能应该摆脱它。但是感谢比较建议,我使用 http 工具包来查看它发送的确切内容并将其与邮递员发送的内容进行比较,我是对的,它不是发送有效负载,而是发送其他所有内容。

标签: python postman


【解决方案1】:

这不是一个答案,但问题是请求模块无法发送内容处置以分离有效负载,因此服务器正在接收有效负载但没有正确解释它,我发现我可以在 node.js 中执行此操作所以我我就这么做

【讨论】:

  • 此答案被标记为正确,但未能解释如何解决特定问题。
猜你喜欢
  • 2020-11-08
  • 2019-07-03
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 2020-11-20
  • 2021-05-24
  • 2019-08-25
  • 2022-08-15
相关资源
最近更新 更多