python使用requests提交post请求并上传文件(multipart/form-data)

2023-05-16

目录

一、背景

二、请求接口上传文件

        2.1、分析接口

        2.2、python进行请求

三、总结


一、背景

        也是前几天,有一个需求上传文件需要自动化。具体是上传到系统一个文件,并收到返回结果。考虑使用python的requests,一般这种查询或上传文件的接口都是post请求。所以就直接使用requests的post请求。但是在开发过程中,遇到一些问题需要注意。所以在此记录一下。

二、请求接口上传文件

        2.1、分析接口

                首先浏览器f12查看接口内容(主要看接口类型、请求头、Payload)。发现上传文件的接口是post类型,请求头中Content-Type也很重要,指定内容类型及请求体的一个分隔符。详见下图。

                 Payload里是接口的请求体,详见下图。接口参数:type、orgType、file ,分别对应下图。其中,file的值为上传的文件(转换为二进制数据)                 对应参数的请求内容,其中------WebKitFormBoundary5rEpBecoRZ2tj60k为分割符,每个两个分割符之前对于一个参数。

        2.2、python进行请求

# 请求头
'''
    这里注意,要将Content-Type注释掉。因为在请求的时候,会自动加上。
'''
header = {
    'Authorization': '1677034306556',
    'Connection': 'keep-alive',
    # 'Content-Type': 'multipart/form-data; boundary=----WebKitFormBoundaryFXTT4S1LKA1LUDBd',
    'Cookie': 'SHIROJSESSIONID=75ace860-0f00-4db0-9440-6c6d53cdf101',
    'Host': 'host:8088',
    'Origin': 'http://host:8088',
    'Referer': 'http://host:8088/njfxq/search/clue/clueFeedBackDetailAll?id=1574192996457648130&Paramspage=clue&caseId=1567439544410976257',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36'
}
# 请求体Payload
'''
    这里有必要解释下:
    如果请求体按照页面显示的配置如下:
        fileObject = {
            'type':'6',
            'orgType': 'B',
            'file': open('上传文件.xlsx','rb')
        }
    是错误的(第一次花费半天才调通)
    //
    正确的格式应该是传入一个元组,格式为:(<fileName>,<fileObject>,<Content-Type>) ,这里的fileObject是指具体的值。
    正确的请求体应为:
        fileObject = {
            'type':(None,'6',None),
            'orgType': (None,'B',None),
            'file': ('上传文件.xlsx',open('上传文件.xlsx','rb'),'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
        }
'''
fileObject = {
    'type':(None,'6',None),
    'orgType': (None,'B',None),
    'file': ('上传文件.xlsx',open('上传文件.xlsx','rb'),'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
}
req = requests.post('http://host:8088/njfxq/finance/investigatefeedback/uploadFile',headers=header,files=fileObject)
print(req.text)

三、总结

        Payload请求体如何转换的问题,看下图应该比较容易理解。

# 下面为补充后的Payload
------WebKitFormBoundarynS4EDa2hdT8tfnF8
Content-Disposition: form-data; name="type"; filename=None
content-type: None

fileObject
------WebKitFormBoundarynS4EDa2hdT8tfnF8
Content-Disposition: form-data; name="orgType"; filename=None
content-type: None

fileObject
------WebKitFormBoundarynS4EDa2hdT8tfnF8
Content-Disposition: form-data; name="file"; filename="样本标签.xlsx"
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet    

fileObject     # 为文件的二进制数据 
------WebKitFormBoundarynS4EDa2hdT8tfnF8--


# 转换为python的请求格式
格式为:'name':(<fileName>,<fileObject>,<Content-Type>)

# 对比如下
fileObject = {
    'type':(None,'6',None),
    'orgType': (None,'B',None),
    'file': ('上传文件.xlsx',open('上传文件.xlsx','rb'),'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python使用requests提交post请求并上传文件(multipart/form-data) 的相关文章

随机推荐

  • RTK

    实时动态技术 xff08 英语 xff1a Real Time Kinematic xff0c RTK xff09 是实时动态载波相位差分技术的简称 xff0c 是一种通过基准站和流动站的同步观测 xff0c 利用载波相位观测值实现快速高精
  • github Tags和Branch分支相关操作(三)

    Tag推送 1 git查看tag命令 xff1a git tag 2 创建Tag直接加入名字就好了 xff0c 格式 xff1a git tag 名字 m 注释 这时只能在本地可以看到自己新建Tag xff0c 在远程中央仓库中还是看不到在
  • PostMan中文汉化亲测好用!!!!

    PostMan 中文汉化版 最新版本 xff1a 8 10 0 更新时间 xff1a 2021 08 07 请认真阅读存储库的自述文件README md 汉化包下载链接 https github com hlmd Postman cn re
  • ubuntu下安装多个版本的python

    本身系统安装了python2 7和python3 5 现在由于开发需要 xff0c 还需要安装python3 6 安装步骤如下 xff1a 1 下载 Python 直接在官网下载 Python的源代码 xff0c 解压缩 xff0c 按照
  • stm32标准库文件内容说明

    目录 思维导图 一 stm32f4xx h文件内容说明 1 定义了HSE时钟频率的值 2 定义了启动HSE时钟的超时时间 xff0c HSI时钟频率的值 3 根据不同的芯片定义中断向量表结构体 4 包含一些头文件 5 对一些数据类型进行重命
  • UART协议详解

    UART使用的是 异步 xff0c 串行通信 串行通信是指利用一条传输线将资料一位位地顺序传送 特点是通信线路简单 xff0c 利用简单的线缆就可实现通信 xff0c 降低成本 xff0c 适用于远距离通信 xff0c 但传输速度慢的应用场
  • C++中的.和::和:和-」的区别

    转自 xff1a https blog csdn net liao392781 article details 97931845 在学习C 43 43 的过程中我们经常会用到 和 和 xff1a 和 gt xff0c 在此整理一下这些常用符
  • hpsocket实现HTTP通信功能

    前段时间朋友急需让我帮忙搞定个C 43 43 的http库 xff1f xff1f xff1f xff1f 然后指定了hpsocket这个库 看了一下是国人写了 xff0c 资料在doc还算比较全 xff0c 整理了很多框架的部分也挺详细
  • Mysql 批量修改四种方式效率对比(一)

    文章目录 Mysql 批量修改四种方式效率对比环境信息测试数据pom 依赖数据库初始化测试数据 批量修改方案第一种 for第二种 case when第三种 replace into第四种 ON DUPLICATE KEY UPDATE 测试
  • idea插件-SonarLint(六)

    文章目录 功能插件名称效果 功能 检查代码bug xff0c 排除编码集错误 插件名称 SonarLint 效果 以下只是演示可以进行bug提示及优化 xff0c 还有更多 修复意见 xff1a 使用 logger 替代 System ou
  • idea插件安装方式(七)

    插件安装两种方式 在线安装 通过 Preferences gt Plugins gt marketplace 在线安装 离线安装 通过 https plugins jetbrains com 离线安装 比如 Lombok xff0c 找对应
  • mysql-递归查询(二)

    文章目录 情景描述数据准备递归sql 情景描述 mysql 表查询 xff0c 经常有通过子不断查询父 xff0c 直至查询不到为止 数据准备 SET NAMES utf8 span class token punctuation span
  • zabbix重启命令

    1 zabbix server服务重启 service zabbix server restart 或者 service zabbix server restart 2 zabbix agentd客户端重启 service zabbix a
  • 使用MediaPlayer实现播放、暂停、继续和停止功能的简易音乐播放器

    1 布局文件 lt xml version 61 34 1 0 34 encoding 61 34 utf 8 34 gt lt LinearLayout xmlns android 61 34 http schemas android c
  • H3C交换机web管理配置

    1 下载一个超级终端到PC机上 由于工作环境不能联网的环境下 xff0c 下载了好几个超级终端才能用 2 超级终端连接有很多教程 但是有一个重要的事情 xff1a 在COM1属性的端口设置里面 xff0c 将 xff08 位 B xff09
  • 交换机MIB浏览器ifType、ifDescr、ifMtu、ifInOctets等的含义

    1 ifType 接口的类型 取值117表示接口为GigabitEthernet 取值62表示借口为FastEnthernet 2 ifDescr 接口类型的描述 有GigabitEthernet FastEthernet等 3 ifMtu
  • mac下PyCharm导入第三方包

    最近对python有兴趣 xff0c 在网上搜了 八天深入理解python 视频教程 xff0c 由于用的mac xff0c 不用安装python xff0c 感觉瞬间开发环境就已经具备了 xff0c 然后连个ipython都没装上 xff
  • Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-

    Failed to execute goal org mybatis generator mybatis generator maven plugin 1 3 2 generate default cli on project ssm Ex
  • windows系统下QT打包后到不同系统的各种报错问题分析

    最近碰到好多人问关于WINDOWS上的QT打包后在自己电脑上可以运行 xff0c 换台电脑报各种错误的问题 于是特地写个帖子总结下一些问题 xff1a 首先是打包QT xff0c 将QT的系统库拉出来 这里可以借用windeployqt工具
  • python使用requests提交post请求并上传文件(multipart/form-data)

    目录 一 背景 二 请求接口上传文件 2 1 分析接口 2 2 python进行请求 三 总结 一 背景 也是前几天 xff0c 有一个需求上传文件需要自动化 具体是上传到系统一个文件 xff0c 并收到返回结果 考虑使用python的re