如何发起包含已打开文件的POST请求?解决字段必填报错问题
解决文件上传POST请求的必填字段错误
你的问题出在文件参数的传递方式上——你把文件对象嵌套进了payload里传给data参数,但requests处理文件上传时,需要单独用files参数来指定文件字段,而不是和普通表单字段混在一起。
错误原因分析
接口提示ExportedDataFile字段必填,是因为后端根本没接收到这个字段:当你把files放到data里时,requests会把它当成普通文本参数处理,而不是文件上传的multipart/form-data部分,自然识别不到。
修正后的代码
把文件字段单独放在files参数中,普通表单字段(比如Token)放在data参数里:
import requests # 定义文件字段:键名要和接口要求的`ExportedDataFile`一致 files = {'ExportedDataFile': open('33332815-2019-04-191419.xml', 'rb')} # 普通表单参数 payload = {'Token': 'test'} # 发送请求:分别传入data和files参数 r = requests.post("http://????", data=payload, files=files) print(r.text)
更安全的写法(推荐)
使用with语句自动管理文件资源,避免忘记关闭文件导致的资源泄漏:
import requests payload = {'Token': 'test'} # with块结束后会自动关闭文件 with open('33332815-2019-04-191419.xml', 'rb') as xml_file: files = {'ExportedDataFile': xml_file} r = requests.post("http://????", data=payload, files=files) print(r.text)
内容的提问来源于stack exchange,提问作者mchovo
相关产品推荐
相关产品推荐

