python requests 上传文件_Python+requests之文件上传与下载

在做接口自动化测试中,经常会遇到文件的上传和下载接口

文件上传

一般上传文件使用的都是Content-Type: multipart/form-data;数据类型,可以发送文件,也可以发送相关的消息体数据。

使用 requests 上传文件的基本步骤:

1.构造文件数据,通过 open 函数以二进制方式打开文件

2.构造相关数据

3.发送请求,将文件数据以 files 参数传入,其他消息体数据通过 data或 json 传入

参考官方文档

>>> url = 'http://httpbin.org/post'

>>> files = {'file': ('report.xls', open('report.xls', 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}

>>> r = requests.post(url, files=files)

>>> r.text

{

...

"files": {

"file": ""

},

...

}

我们对它重新封装一下然后测试下上传

import requests

def test_up(url, file):

"""

:param url: 接口url

:param file: 上传文件的路径

:return:

"""

files = {"file": open(file, "rb")}

s = requests.session()

r = s.post(url, files=files, verify=False)

print(r.json())

if __name__ == "__main__":

url = "https://www.url.com/test/import"

file = "D:\\up.xlsx"

test_up(url=url, file=file)

文件上传成功,结果如下图:

blog_114_01.jpg

文件下载

小文件下载,可以直接写入一个文件即可:

import requests

r = requests.get("https://img.sitven.cn/Tencent_blog_detail.jpg")

with open(r"D:\a.jpg", "wb") as f:

f.write(r.content)

下载大文件,建议下面的方式:

import requests

def test_downloads(url, file):

s = requests.session()

r = s.get(url, stream=True, verify=False)

with open(file, "wb") as f:

for chunk in r.iter_content(chunk_size=512):

f.write(chunk)

if __name__ == "__main__":

url = "https://www.url.com/test/export"

file = "D:\\a.xlsx"

test_downloads(url=url, file=file)

运行结果可直接查看文件:D:\\a.xlsx

解释:

当把get函数的stream参数设置成False时,它会立即开始下载文件并放到内存中,如果文件过大,有可能导致内存不足。

当把get函数的stream参数设置成True时,它不会立即开始下载,当你使用iter_content或iter_lines遍历内容或访问内容属性

时才开始下载。需要注意一点:文件没有下载之前,它也需要保持连接。

iter_content:一块一块的遍历要下载的内容

iter_lines: 一行一行的遍历要下载的内容

注:官方说明iter_lines方法不安全,如下截图所示:

blog_114_02.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值