# 最近要做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)
 

最新文章

  1. vs2015 安装之后安装MSSM 2016 导致 vs启动报错 System.ArgumentException 已添加了具有相同键的项,ActivityLog.xml
  2. Java中关于HashMap的元素遍历的顺序问题
  3. #ifndef -摘自百度百科
  4. 四个查找命令find,locate,whereis,which的区别
  5. 根据 字数 确定 UI控件高度
  6. Python的更多内容
  7. 基于.net mvc的校友录(四、系统结构图)
  8. su: Bad item passed to pam_*_item()
  9. Impala与Hive的比較
  10. SQL学习之使用视图
  11. 学习node的REPL
  12. 服务器遭受 ssh 攻击
  13. day6 bytes类型用法
  14. hue 记录
  15. NIO 学习笔记三:DatagramChannel
  16. JNI学习笔记_C调用Java
  17. Ubuntu14.04下安装DevStack
  18. php性能优化二(PHP配置php.ini)
  19. 转:介绍shell_notifyicon,SendMessage,CallWindowProc,GetWindowLong,SetWindowLong的用法
  20. mosquitto $SYS下topic

热门文章

  1. Redis数据结构之quicklist
  2. %E6%9D%8E%E9%9B%B7是什么编码
  3. 第四章:4.0 python常用的模块
  4. Linux 添加到环境变量
  5. 【AtCoder】【模拟】【模型转化】Camel and Oases(AGC012)
  6. Mybatis 通用 Mapper 和 Spring 集成
  7. svn没有权限报出的错
  8. MongoDB 组合多个条件查询($and、$in、$gte、$lte)
  9. __x__(41)0909第五天__长表格
  10. ASPOSE.Word 开发资料整理