python拼接multipart/form-data类型post请求格式
# 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
}
转化后的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)
python拼接multipart/form-data类型post请求格式的更多相关文章
- 【转】浏览器中的data类型的Url格式,data:image/png,data:image/jpeg!
所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag, ...
- 浏览器中的data类型的Url格式,data:image/png,data:image/jpeg!(源自:http://blog.csdn.net/roadmore/article/details/38498719)
所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些“小”的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Tag,哪怕这个图片非常非常 ...
- 如何将查出的日期Data类型以Json格式输出到前端
方法一 在返回的实体的属性中加上注解 // 创建时间 @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private ...
- html5 file upload and form data by ajax
html5 file upload and form data by ajax 最近接了一个小活,在短时间内实现一个活动报名页面,其中遇到了文件上传. 我预期的效果是一次ajax post请求,然后在 ...
- Sending forms through JavaScript[form提交 form data]
https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript As in the ...
- data类型的url
所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些"小"的数据,可以在网页中直接嵌入,而不是从外部文件载入.例如对于img这个Ta ...
- [整理]Ajax Post请求下的Form Data和Request Payload
Ajax Post请求下的Form Data和Request Payload 通常情况下,我们通过Post提交表单,以键值对的形式存储在请求体中.此时的reqeuest headers会有Conten ...
- HTTP请求中的Form Data与Request Payload的区别
前端开发中经常会用到AJAX发送异步请求,对于POST类型的请求会附带请求数据.而常用的两种传参方式为:Form Data 和 Request Payload. GET请求 使用get请求时,参数会以 ...
- HTTP 请求中的 Form Data 与 Request Payload 的区别
HTTP 请求中的 Form Data 与 Request Payload 的区别 前端开发中经常会用到 AJAX 发送异步请求,对于 POST 类型的请求会附带请求数据.而常用的两种传参方式为:Fo ...
随机推荐
- ios 运行时特征,动态改变控件字体大小
需求:ex: 在不同尺寸的iPhone上面显示的字体大小不一样 https://github.com/rentzsch/jrswizzle #import <UIKit/UIKit.h> ...
- eclipse 界面开发--windowbuilder
插件地址: http://www.eclipse.org/windowbuilder/download.php http://www.eclipse.org/windowbuilder/
- sklearn数据库-【老鱼学sklearn】
在做机器学习时需要有数据进行训练,幸好sklearn提供了很多已经标注好的数据集供我们进行训练. 本节就来看看sklearn提供了哪些可供训练的数据集. 这些数据位于datasets中,网址为:htt ...
- day15.Python内置函数
作用域相关 locals() -- 获取执行本方法所在命名空间的局部变量的字典 globals() -- 获取全局变量的字典 print(locals()) print(globals()) {'_ ...
- logrotate命令
logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循).压缩以及删除旧的日志文件,例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月 ...
- Maven中pom.xml文件的配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- day13_H5_CSS_1
一.标签.HTML是可以被浏览器解析的一套规则 1.a标签:他是主动闭合标签,表现形式<a href="http://www.baidu.com">baidu<a ...
- weblogic10.3 启动报错 Unrecognized option: -jrockit Error: Could not create the Java Virtual Machine
今天在使用weblogic10.3+jdk7创建domain的时候,建好domain后启动报如下错误信息: Unrecognized option: -jrockitError: Could not ...
- Java三大集合框架
定义:java中集合类:是一种工具类,就像是容器,储存任意数量的具有共同属性的对象 一.List集合 1.List实现的超级父类接口:Collection 2.了解ArrayList类 A):定义的格 ...
- 201771010126 王燕《面向对象程序设计(java)》第二周学习总结
201771010126 王燕<面向对象程序设计(java)>第二周学习总结 一.理论知识学习部分 3.1j简单 的java应用程序 标识符由字母.下划线.美元符号和数字组成, 且第一个符 ...