python+request+MultipartEncoder即from-data表单提交(带文件上传)

本文介绍如何使用Python的requests和requests_toolbelt库进行from-data表单提交,包括文件上传。首先,通过Fiddler等工具抓取接口,然后详细解析表单提交和文件上传的代码实现,重点讲解了MultipartEncoder在表单格式化中的作用。

如上,一个冗长的标题,其实就只是后台写个标题、备注加一个文件的上传功能。

首先,你要抓接口

(如果已经有接口可以直接点目录进代码编写阶段)

你可能是要灌数据,可能是要做接口自动化,可能是要做接口压力测试,这些都绕不过fiddler或者charles,本文以fiddler为例。
ps:并不影响代码怎么写
通过抓包你会发现,from-data和一般的传参不太一样,fiddler里长这样:
在这里插入图片描述
处处透露着它是一个from-data表单,所以这个时候你的python请求就不太一样了。

重点,python怎么写

首先,安装三方库requests_toolbelt

pip install pip install -i  http://pypi.douban.com/simple/ requests_toolbelt

贴代码

import requests
from requests_toolbelt import MultipartEncoder

url = "这里写你抓到的url"
fields = {
        'title': '标题1',
        'description': '备注',
        'expr_time': '2021-10-25 16:26',
        'excel_file': ('兑换码表格.xlsx', open(r'C:/User/Desktop/兑换码表格.xlsx', 'rb'))
    }
payload = MultipartEncoder(fields)
headers = {
        # header里,可写其他必要的参数
        'Content-type': payload.content_type  #  这条语句必写
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
        

表单提交代码解析

这两行,不解释,必须有

import requests
from requests_toolbelt import MultipartEncoder

不解释,写你抓到的url

url = "这里写你抓到的url"

重点来了,title、description、expr_time、excel_file就是参数名,后边写值

fields = {
        'title': '标题1',
        'description': '备注',
        'expr_time': '2021-10-25 16:26',
        'excel_file': ('兑换码表格.xlsx', open(r'C:/User/Desktop/兑换码表格.xlsx', 'rb'))
    }

我也不太清楚原理是什么,把fields转换成MultipartEncoder?或者叫实例化?
总之这一行代码不能少,不然走不了表单的格式

payload = MultipartEncoder(fields)

header正常写参数名和值,content-type必须这样写,才能传表单

headers = {
        # header里,可写其他必要的参数
        'Content-type': payload.content_type  #  这条语句必写

传文件代码解析

可以看到文件的代码如下:

'excel_file': ('兑换码表格.xlsx', open(r'C:/User/Desktop/兑换码表格.xlsx', 'rb'))

‘excel_file’ 参数名,不解释
‘兑换码表格.xlsx’ 文件名,尽量和本地的保持一致
open(…)不解释,打开文件就是这个写法

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值