python拼接multipart/form-data类型post请求格式
2024-08-27 06:52:41
# 最近要做form-data类型接口,大多数这种格式用来文件上传,但是我们公司就是用这种格式传输请求数据。
# 百度了一些基本都是files方式的,可是我们需要data=方式的。下面自己来拼接,代码很简单。
# multipart/form-data
class MultipartFormData(object):
"""multipart/form-data格式转化""" @staticmethod
def format(data, boundary="----WebKitFormBoundary7MA4YWxkTrZu0gW", headers={}):
"""
form data
:param: data: {"req":{"cno":"18990876","flag":"Y"},"ts":1,"sig":1,"v": 2.0}
:param: boundary: "----WebKitFormBoundary7MA4YWxkTrZu0gW"
:param: headers: 包含boundary的头信息;如果boundary与headers同时存在以headers为准
:return: str
:rtype: str
"""
#从headers中提取boundary信息
if "content-type" in headers:
fd_val = str(headers["content-type"])
if "boundary" in fd_val:
fd_val = fd_val.split(";")[1].strip()
boundary = fd_val.split("=")[1].strip()
else:
raise "multipart/form-data头信息错误,请检查content-type key是否包含boundary"
#form-data格式定式
jion_str = '--{}\r\nContent-Disposition: form-data; name="{}"\r\n\r\n{}\r\n'
end_str = "--{}--".format(boundary)
args_str = "" if not isinstance(data, dict):
raise "multipart/form-data参数错误,data参数应为dict类型"
for key, value in data.items():
args_str = args_str + jion_str.format(boundary, key, value) args_str = args_str + end_str.format(boundary)
args_str = args_str.replace("\'", "\"")
return args_str
调用方式:示例:data即我们要传的接口参数,需要转化成form-data格式
需要注意的是boundary参数,这个参数要跟header头中定义的一样,否则会出问题。否则会出问题,否则会出问题。重要事情说三遍。
headers = {
'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
'cache-control': "no-cache",
}
data = {
"req":{"cno":""},
"appid":"dp3wY4YtycajNEz23zZpb5Jl",
"ts":1,
"sig":1,
"v": 2.0
}
# mh = MultipartFormData.format(data=data, boundary="----WebKitFormBoundary7MA4YWxkTrZu0gW")
mh = MultipartFormData.format(data=data, headers=headers)
print(mh)
转化后的data form-data字符串为:
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="v" 2.0
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="req" {"cno": ""}
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="sig" 1
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="ts" 1
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="appid" dp3wY4YtycajNEz23zZpb5Jl
------WebKitFormBoundary7MA4YWxkTrZu0gW--
python调用时将转form-data的字符串给data参数即可:
res = requests.request("POST",self.url,data=mh, headers= headers)
最新文章
- vs2015 安装之后安装MSSM 2016 导致 vs启动报错 System.ArgumentException 已添加了具有相同键的项,ActivityLog.xml
- Java中关于HashMap的元素遍历的顺序问题
- #ifndef -摘自百度百科
- 四个查找命令find,locate,whereis,which的区别
- 根据 字数 确定 UI控件高度
- Python的更多内容
- 基于.net mvc的校友录(四、系统结构图)
- su: Bad item passed to pam_*_item()
- Impala与Hive的比較
- SQL学习之使用视图
- 学习node的REPL
- 服务器遭受 ssh 攻击
- day6 bytes类型用法
- hue 记录
- NIO 学习笔记三:DatagramChannel
- JNI学习笔记_C调用Java
- Ubuntu14.04下安装DevStack
- php性能优化二(PHP配置php.ini)
- 转:介绍shell_notifyicon,SendMessage,CallWindowProc,GetWindowLong,SetWindowLong的用法
- mosquitto $SYS下topic
热门文章
- Redis数据结构之quicklist
- %E6%9D%8E%E9%9B%B7是什么编码
- 第四章:4.0 python常用的模块
- Linux 添加到环境变量
- 【AtCoder】【模拟】【模型转化】Camel and Oases(AGC012)
- Mybatis 通用 Mapper 和 Spring 集成
- svn没有权限报出的错
- MongoDB 组合多个条件查询($and、$in、$gte、$lte)
- __x__(41)0909第五天__长表格
- ASPOSE.Word 开发资料整理