python接口自动化32-上传文件时自动判断文件类型(filetype)

前言

如何判断一个文件的类型呢,判断这个文件是png还jpg,还是mp3文件?
filetype 包是 python 用来判断文件类型的依赖包,github地址https://github.com/h2non/filetype.py

filetype 安装

pip install filetype

简介

一个小巧自由开放Python开发包,主要用来获得文件类型。包要求Python 3.+

功能特色

  • 简单友好的API

  • 支持宽范围文件类型

  • 提供文件扩展名和MIME类型判断

  • 文件的MIME类型扩展新增

  • 通过文件(图像、视频、音频…)简单分析

  • 可插拔:

    添加新的自定义类型的匹配

  • 快,即使处理大文件

  • 只需要前261个字节表示的最大文件头,这样你就可以通过一个单字节

  • 依赖自由(只是Python代码,没有C的扩展,没有libmagic绑定)

  • 跨平台文件识别

使用示例

import filetype

def main():
kind = filetype.guess('tests/fixtures/sample.jpg')
if kind is None:
print('Cannot guess file type!')
return

print('File extension: %s' % kind.extension)
print('File MIME type: %s' % kind.mime)

if __name__ == '__main__':
main()

结合文件上传使用示例

接下来看下使用场景,在前面接口测试文件上传的时候,参考这篇https://www.cnblogs.com/yoyoketang/p/8024039.html

from requests_toolbelt import MultipartEncoder
import requests

m = MultipartEncoder(
fields = [
('source', ('f1.ext', f1, 'application/x-example-mimetype')),
('source', ('f2.ext', f2, 'application/x-example-mimetype')),
]
)

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

imgFile 后面的参数 ("1.png", open("d:\\1.png", "rb"), "image/png"), 每次都需要根据不同的文件类型去修改成对应的mime类型。
接下来可以用上面的自动获取文件类型的方法,写个函数,只需传文件的路径即可自动获取

import filetype
import os
from requests_toolbelt import MultipartEncoder
import requests
# 作者-上海悠悠 QQ交流群:717225969

def upload(filepath="files/122.png"):
'''根据文件路径,自动获取文件名称和文件mime类型'''
kind = filetype.guess(filepath)
if kind is None:
print('Cannot guess file type!')
return
# 媒体类型,如:image/png
mime_type = kind.mime
# 文件真实路径
file_real_path = os.path.realpath(filepath)
# 获取文件名 122.png
fullflname = os.path.split(file_real_path)[-1]
return (fullflname, open(file_real_path, "rb"), mime_type)

m = MultipartEncoder(
fields = [
('source', upload(filepath="files/122.png")),
('source', upload(filepath="files/123.png")),
]
)

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

(0)

相关推荐

  • 三分钟掌握文件格式识别

    fleep是一个为Python而写的检测文件类型的库,用法十分简单,功能强大. 使用方法 fleep有一个主函数get(),该函数提取128bytes就能判断一个文件的格式信息. get()返回的对象 ...

  • 任意(不安全)文件下载和上传

    文章目录 一.任意文件下载 1)漏洞介绍 2)利用方式 ##举例: 3)漏洞修复 二. 任意文件上传 1)概述 2)测试流程 3)实战测试 3.1 客户端检测绕过(javascript 检测) 3.2 ...

  • Python自动化整理文件“大升级”,任意路径下文件,都给你整理的明明白白!

    作者:Huny https://www.cnblogs.com/huny/p/14146719.html 大家好,我是为大家分享"干货"和"黑科技"的黄同学! ...

  • python接口自动化16-multipart/form-data上传多个附件

    前言 reuqests上传一张图片到服务器,前面已经介绍过了,那么如何在提交BUG的时候,上传附件呢? 上传附件的时候,文件的name参数名称是一样的,python里面key是不可以重复的,又如何处理 ...

  • python接口自动化11-post传data参数案例

    前言: 前面登录博客园的是传json参数,有些登录不是传json的,如jenkins的登录,本篇以jenkins登录为案例,传data参数. 一.登录jenkins抓包 1.登录jenkins,输入账 ...

  • python接口自动化22-下载文件(excel)

    前言 Content-Type类型为octets/stream,这种一般是文件类型了,比如有时候需要导出excel数据,下载excel这种场景如何用python来实现呢? 抓下载接口 1.下载的场景如 ...

  • python接口自动化1-发送get请求

    前言 requests模块,也就是老污龟,为啥叫它老污龟呢,因为这个官网上的logo就是这只污龟,接下来后面的自动化都离不开它. 一.环境安装 1.用pip安装requests模块 >>p ...

  • python接口自动化2-发送post请求

    前言 发送post的请求参考例子很简单,实际遇到的情况却是很复杂的,首先第一个post请求肯定是登录了,但登录是最难处理的.登录问题解决了,后面都简单了. 一.查看官方文档 1.学习一个新的模块,其实 ...

  • python接口自动化3-自动发帖(session)

    前言 上一篇模拟登录博客园,但这只是第一步,一般登录后,还会有其它的操作,如发帖,评论等,这时候如何保持会话呢? 一.session简介 1.查看帮助文档,贴了一部分,后面省略了 >>im ...

  • python接口自动化4-绕过验证码登录(cookie)

    前言 有些登录的接口会有验证码:短信验证码,图形验证码等,这种登录的话验证码参数可以从后台获取的(或者查数据库最直接). 获取不到也没关系,可以通过添加cookie的方式绕过验证码. 一.抓登录coo ...

  • python接口自动化5-Json数据处理

    前言 有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理. 一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的 ...

  • python接口自动化6-重定向(Location)

    前言 某屌丝男A鼓起勇气向女神B打电话表白,女神B是个心机婊觉得屌丝男A是好人,不想直接拒绝于是设置呼叫转移给闺蜜C了,最终屌丝男A和女神闺蜜C表白成功了,这种场景其实就是重定向了. 一.重定向 1. ...