我正在编写一个更大的脚本,并在尝试将文件与 json 令牌一起发布时遇到了一个奇怪的问题。
我已成功使用 requests.post() 函数将 JSON 数据发送到服务器。但是,当我尝试发送文件和 JSON 数据时,帖子失败了,当我检查帖子的正文时,它充满了我没有放在那里的“lorem ipsum”文本,这导致请求失败,而且我的JSON 数据无处可寻。
import requests
SERVER = "http://localhost:3030/"
test_token = {'session_uuid': '90f50db9-39b1-476c-9fa4-3b7d2af51ad4',
'client_uuid': '371f291c-2a65-4384-9e01-bf3ee880b777',
'expiration': 'Wed Jun 18 19:20:21 EDT 2022'}
def post_upload_endpoint(endpoint, path, payload):
try:
print("Payload: ", payload) #just to make sure it's what I expect
r = requests.post(endpoint, files=path, json=payload)
print("Request body: ", r.request.body)
return r.json()
except Exception as x:
print("Exception: ", x)
return False, "Failed: {}".format(endpoint)
def main():
path = {'document': open('./payload.txt', 'rb')}
post_upload_endpoint(SERVER + "exc/sync", path, test_token)
if __name__ == "__main__":
main()
以上,运行时打印出以下内容。第一行是我的健全性检查,确保令牌正确传递,就是这样。第二行是请求正文。
Payload: {'session_uuid': '90f50db9-39b1-476c-9fa4-3b7d2af51ad4', 'client_uuid': '371f291c-2a65-4384-9e01-bf3ee880b777', 'expiration': 'Wed Jun 18 19:20:21 EDT 2022'}
Request body: b'--0b9b477016594955267c5e7859cc0acb\r\nContent-Disposition: form-data; name="document"; filename="payload.txt"\r\n\r\n"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."\r\n--0b9b477016594955267c5e7859cc0acb--\r\n'
为什么会这样?我搜索 Google 和 StackOverflow,似乎没有其他人报告此错误。我的令牌不见了,取而代之的是一整段“lorem ipsum”。
我一直在阅读今天早上可以找到的文档,但它非常稀疏,并且没有任何关于默认使用“lorem ipsum”段落的内容。
尽管从文档中不是很清楚,但似乎json
andfiles
参数requests.post
是互斥的。
当我们在这里查看请求源代码时,我们可以看到:链接到 github。
在the prepare_body
函数中,body 被设置为编码后的 json,然后如果你提供一个文件,body 会被文件的内容覆盖。
因此,您看到的 lorem ipsum 很可能是您文件的内容,./payload.txt
您检查了吗?
要同时发送文件和 json,请参阅此答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句