文件格式上传方法
def test_upload_file(self):
url = "http://www.baidu.com/"
files = {'file': ('test.xls', open("test.xls", 'rb'), 'application/vnd.ms-excel', {'Expires': '0'})}
headers = {"Access-Token": hsj_token}
#注意 headers里主要注释掉Content-type才可以上传成功
r = requests.post(url=url, files=files, headers=headers)
print(r.text)
非文件格式上传
def format(self, data, headers):
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 Exception("multipart/form-data信息头错误")
# form-data格式定式
json_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 Exception("multipart/form-data参数错误,data参数应为dict类型")
for key, value in data.items():
args_str = args_str + json_str.format(boundary, key, value)
args_str = args_str + end_str.format(boundary)
args_str = args_str.replace("\'", "\"")
print("args_Str:", args_str)
return args_str
#非文件格式的formdata上传
def test_upload_nofiles(self):
form_headers = {"Access-Token": hsj_token,
"Content-Type":"multipart/form-data; boundary=---- WebKitFormBoundaryEDDSDGEAQA3QP999"}
url = "http://www.baidu.com"
params = {"project":38}
payload = self.format(params,form_headers)
r = requests.post(url,data=payload,params=params,verify=False,headers=form_headers)
result = r.json()
print("result:",result)
参考文档:
https://blog.csdn.net/Chihwei_Hsu/article/details/81943008 (非文件上传)
https://blog.csdn.net/qq_39802740/article/details/84257745 (文件上传)
https://requests.readthedocs.io/zh_CN/latest/user/quickstart.html#post-multipart-encoded