python拼接multipart/form-data类型post请求格式

# 最近要做form-data类型接口,大多数这种格式用来文件上传,但是我们公司就是用这种格式传输请求数据。
# 百度了一些基本都是files方式的,可是我们需要data=方式的。下面自己来拼接,代码很简单。
 
# multipart/form-data
class MultipartFormData(object):
    """multipart/form-data格式转化"""

    @staticmethod
    def to_form_data(data, boundary="----WebKitFormBoundary7MA4YWxkTrZu0gW"):
        """
        form data
        :param: data:  {"req":{"cno":"18990876","flag":"Y"},"ts":1,"sig":1,"v": 2.0}
        "param: boundary: "----WebKitFormBoundary7MA4YWxkTrZu0gW"
        :return: str
        :rtype: str
        """
        jion_str = '--{}\r\nContent-Disposition: form-data; name="{}"\r\n\r\n{}\r\n'
        end_str = "--{}--".format(boundary)
        args_str = ""
        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
View Code

调用方式:示例:data即我们要传的接口参数,需要转化成form-data格式

需要注意的是boundary参数,这个参数要跟header头中定义的一样,否则会出问题。否则会出问题,否则会出问题。重要事情说三遍。

    headers = {
        'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
        'cache-control': "no-cache",
    }
data = {
    "req":{"cno":"1213058673616305"},
    "appid":"dp3wY4YtycajNEz23zZpb5Jl",
    "ts":1,
    "sig":1,
    "v": 2.0
    } 
mh = MultipartFormData.to_form_data(data=data, boundary="----WebKitFormBoundary7MA4YWxkTrZu0gW")
print(mh)

转化后的data  form-data字符串为:

------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="v"

2.0
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="req"

{"cno": "1213058673616305"}
------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--
View Code

python调用时将转form-data的字符串给data参数即可:

res = requests.request("POST",self.url,data=mh, headers= headers)
 

猜你喜欢

转载自www.cnblogs.com/yhleng/p/10696922.html