# 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 }
轉化後的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--
python調用時將轉form-data的字符串給data參數便可:url
res = requests.request("POST",self.url,data=mh, headers= headers)