一、multipart/form-data简单介绍
http的多表单提交时post请求一种,
1、需要再http request header里面设置Content-Type:multipart/form-data; boundary=---------------thisisboundaryfortest
multipart/form-data 此类型告诉服务端,请求是一个多表单的
boundary 为分割字符串
2、multipart/form-data 制定数据的为二进制类型,对于图片、音频更高效
3、报个格式样例
--${bound}
Content-Disposition: form-data; name="test1"
"my name is test1"
--${bound}
Content-Disposition: form-data; name="test2"
"my name is test2"
2、发起多表单请求,都是字符串
payload = (('test1', 'value1'), ('test2', 'value2')) r = requests.post('http://0.0.0.0:7778', data=payload)
3、字符串和文件混合
url = "http://0.0.0.0:7777/upload" filepath = "/Users/tao.zhang/Downloads/493196591beef5c3e073c9e985e123b4.jpg" data = {"city_id": "355"} files = {"uploaded_file": open(filepath, "rb")} r = requests.post(url, data=data, files=files)
4、html表单发起
<!doctype html> <html> <body> <form action='/upload' method='post' enctype='multipart/form-data'> <input type='file' name='uploaded_file'> <select name="city_id"> <option value="379">天津</option> <option value="33">北京</option> <option value="355" selected="selected">石家庄</option> <option value="376">唐山</option> </select> <input type='submit' value='Upload'> </form>
5、用flask简单写了一个服务端
import flask app = flask.Flask(__name__) @app.route('/', methods=['GET', 'POST']) def test3(): print flask.request.form.get("test1") print flask.request.form.get("test2") return "test3" if __name__=="__main__": app.run(host="0.0.0.0", port=7778)