python拼接multipart/form-data類型post請求格式

# 最近要作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格式python

須要注意的是boundary參數,這個參數要跟header頭中定義的同樣,不然會出問題。不然會出問題,不然會出問題。重要事情說三遍。app

    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.format(data=data, boundary="----WebKitFormBoundary7MA4YWxkTrZu0gW")
mh = MultipartFormData.format(data=data, headers=headers)
print(mh)
 

 

轉化後的data  form-data字符串爲:ide

------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參數便可:url

res = requests.request("POST",self.url,data=mh, headers= headers)
相關文章
相關標籤/搜索