关于requests Post方式上传文件

背景

前两天需要调用一个接口,使用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’)}

猜你喜欢

转载自blog.csdn.net/daiyu__zz/article/details/84704443