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 ...
随机推荐
- JSONP ---------跨域
什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: 首 ...
- Cordova IOT Lesson002
hello index.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"& ...
- VsCode创建第一个vue项目
使用vue-cli快速构建项目 vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. 安装vue-cli之前,需要先安装了vue和webpack · node -v ...
- IO操作、PIL使用、Django的admin操作
操作内存的流-StringIO | BytesIO from io import StringIO, BytesIO #创建操作字符串的内存流 sf = StringsIO() #往内存中写 sf.w ...
- Mysql5.7 单表 500万数据迁移到新表的快速实现方案
开发过程中需要把一个已有500万条记录的表数据同步到另一个新表中,刚好体验下Mysql官方推荐的大数据迁移的方案:SELECT INTO OUTFILE,LOAD DATA INFILE Mysql ...
- Anaconda介绍、安装及使用教程
https://www.jianshu.com/p/62f155eb6ac5 Anaconda介绍.安装及使用教程 Python是一种面向对象的解释型计算机程序设计语言,其使用,具有跨平台的特点,可以 ...
- Nikita and string [思维-暴力] ACM
codeforces Nikita and string time limit per test 2 seconds memory limit per test 256 megabytes O ...
- angularjs 初始化方法执行两次以及url定义错误导致传值错误问题
1.初始化方法执行两次以上的问题定义一个 route.如下所示:.state('main.channelQryDetail', { url:'/channelDetail/:channelNo/:pa ...
- css3图形绘制
以下几个例子主要是运用了css3中border.bordr-radius.transform.伪元素等属性来完成的,我们先了解下它们的基本原理. border:简单的来说border语法主要包含(bo ...
- jquery各版本
各版本下载: https://www.jb51.net/zt/jquerydown.htm