Python调用requests发multipart/form请求到OpenProject报TypeError如何解决
错误原因
- 你代码中
metadata字段的赋值使用了大括号{}包裹多个元素,Python会将其解析为集合类型,而requests库的files参数要求每个表单项对应的值为符合格式的元组,这是触发TypeError的直接原因。 metadata部分要求传入JSON序列化后的字符串,你没有对字典做序列化处理,即使修正集合的问题也会后续请求报错。- 注意不要在请求头中手动设置
Content-Type,requests会自动生成带boundary的合法multipart/form-data请求头,手动指定反而会导致请求格式错误。
修正方案
首先导入JSON处理模块:
import json
调整请求构造逻辑如下:
filename = "image{}.png".format(index) with open(filename, 'rb') as file: multipart_form = { # metadata部分:无文件名,传入序列化后的JSON字符串,指定Content-Type为application/json "metadata": (None, json.dumps({"fileName": filename}), "application/json"), # file部分:可填写文件名(OpenProject会忽略该值,以metadata中的fileName为准),传入二进制文件内容,指定MIME类型 "file": (filename, file.read(), "image/png") } res = requests.post(url=url, files=multipart_form, headers=header) return res
内容的提问来源于stack exchange,提问作者Alexander Tepe
相关产品推荐
相关产品推荐

