iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python使用requests提交post请求并上传文件(multipart/form-data)
  • 558
分享到

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

python爬虫 2023-09-04 05:09:18 558人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录 一、背景 二、请求接口上传文件         2.1、分析接口         2.2、python进行请求 三、总结 一、背景         也是前几天,有一个需求上传文件需要自动化。具体是上传到系统一个文件,并收到返

目录

一、背景

二、请求接口上传文件

        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')        }    是错误的(第一次花费半天才调通)    //    正确的格式应该是传入一个元组,格式为:(,,) ,这里的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------WebKitFormBoundarynS4EDa2hdT8tfnF8Content-Disposition: form-data; name="type"; filename=Nonecontent-type: NonefileObject------WebKitFormBoundarynS4EDa2hdT8tfnF8Content-Disposition: form-data; name="orgType"; filename=Nonecontent-type: NonefileObject------WebKitFormBoundarynS4EDa2hdT8tfnF8Content-Disposition: form-data; name="file"; filename="样本标签.xlsx"Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet    fileObject     # 为文件的二进制数据 ------WebKitFormBoundarynS4EDa2hdT8tfnF8--# 转换为python的请求格式格式为:'name':(,,)# 对比如下fileObject = {    'type':(None,'6',None),    'orgType': (None,'B',None),    'file': ('上传文件.xlsx',open('上传文件.xlsx','rb'),'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')}

来源地址:https://blog.csdn.net/zkkkkkkkkkkkkk/article/details/129196847

--结束END--

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

本文链接: https://www.lsjlt.com/news/393020.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作