python requests实现excel文件上传和导出的自动化

文件上传

文件上传的接口请求头中的Content-Type属性就要使用multipart/form-data
multipart/form-data是指定传输数据为二进制类型,比如图片、mp3、文件。

就可以使用一个requests_toolbelt的工具包来把文件转成二进制结构;
requests-toolbelt官方文档

安装:pip install requests-toolbelt

官网关于requests-toolbelt的例子:

from requests_toolbelt import MultipartEncoder
import requests

m = MultipartEncoder(
    fields={
    	'field0': 'value',#第一个参数 
    	'field1': 'value',#第二个参数
        'field2': ('filename', open('file.py', 'rb'), 'text/plain')#第三个参数是文件
        }
    )

r = requests.post('http://httpbin.org/post', data=m,
                  headers={'Content-Type': m.content_type})

实战:
文件上传的fiddler接口抓包的信息与requests_toolbelt 与MultipartEncoder中参数的对应;
在这里插入图片描述
其中的参数boundary是分割符,是随机生成的字符串,用来分隔文本的开始和结束,会展示在Content-Type中;

Content-Type: multipart/form-data; boundary=${bound}

文件导出

例子:

response = requests.post(url=url, headers=headers, json=body,verify=False, stream=True)

content_disposition = response.headers.get('content-disposition')#截取content-disposition的filename

filename_code = content_disposition.split("=")[-1] #分隔字符串,提取文件名
import urllib
filename = urllib.parse.unquote(filename_code) #url解码

filepath = os.path.join('C:/Users/Administrator/Desktop', filename)#拼接路径

if response.status_code == 200:
    if response.text:  # 判断文件内容是否为空
        with open(filepath, 'wb') as f:
            for chunk in response.iter_content(chunk_size=1):  # iter_content循环读取信息写入,chunk_size设置文件大小
                f.write(chunk)
    else:
        print("文件为空")

导出接口Fiddler抓包信息

注意事项:

  • requests的参数stream要配置成True,以用于大文件的下载;可参考
  • 文件导出接口的响应头中的content-disposition中会返回文件名的信息,可以提取出来;但是filename是通过url加密过的,需要解密;
  • 需要写文件路径,不然会直接保存在python运行文件的文件夹下;
  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值