背景
前两天需要调用一个接口,使用post方式上传文件。于是使用Python的requests进行发送post请求,但是一直报服务器500的错误,感觉很纳闷,折磨我好久之后才注意到之前使用的post请求只是携带一些字段,而这次是需要向接口上传文件。
步骤
先这样,,,再这样,,,嗯,解决了,先说一下post请求四种传送正文的方式;
POST请求四种传递正文的方式
(1)请求正文是application/x-www-form-urlencoded
最常见的POST提交数据的方式,浏览器的原生form表单,如果不设置enctype属性,那么最终就会以application/x-www-form-urlencoded方式提交数据。
(2)multipart/form-data
上传文件的表单
(3)application/json
用来告诉服务器消息主体是序列化之后的JSON字符串。
(4)text/xml
它是一种使用HTTP作为传输协议,XML作为编码方式的远程调用规范。
解决
以上我使用最多的是application/json形式,本次需要讲的是第二种;
我使用postman上传文件成功,导出python 的代码,但是上传后文件为空,多番修改后无效,就弃用;
附上代码:
def upload_image(cover_path):
url = "http://api-xxx-xxx"
headers ={
'Authorization':'xxxxxxx',
}
files = {'file': open(cover_path,'rb')}
try:
r = requests.post(url=url,files=files,headers=headers).text
imageUrl = json.loads(r)['result']
if imageUrl != None:
imageUrl = imageUrl[0]
except Exception as e:
print(e)
最主要:files = {‘file’: open(cover_path,‘rb’)}