前言
multipart/form-data这种格式官方文档给的参考案例比较简单,实际情况中遇到会比较复杂,本篇讲解multipart/form-data的表单如何提交,非图片上传
一、 禅道提交bug
1.以禅道提交bug为参考案例,手动操作一次提交bug,抓包查看Content-Type: multipart/form-data
2.在WebForms里面查看参数详情
二、参数填写
1.注意了,这里的参数对应为字典格式,字典的key对应WebForms里查看的name="这里的参数",value对应WebForms查看的value值
1 ``` 2 f = { 3 "product": "1", 4 "module": "0", 5 "project": "", 6 "openedBuild[]": "trunk", 7 "assignedTo": "admin", 8 "type": "codeerror", 9 "os": "all", 10 "browser": "all", 11 "color": "", 12 "title": "yoyoketang-这是一个bug描述1122", 13 "severity": "3", 14 "pri": "0", 15 "steps": '<p>[步骤]</p>\ 16 <p>1、第一步点</p>\ 17 <p>2、第二步点</p>\ 18 <p>3、点三步点</p>\ 19 <p>[结果]</p>\ 20 <p><img src="data/upload/1/201712/072254170557cdn.png" alt="" /></p>\ 21 <p>[期望]</p>', 22 "story": "0", 23 "task": "0", 24 "mailto[]": "", 25 "keywords": "", 26 "files[]": "", 27 "labels[]": "", 28 "uid": "5a2955c884f98", 29 "case": "0", 30 "caseVersion": "0", 31 "result": "0", 32 "testtask": "0" 33 } 34 ```
2.如果有图片上传,这里<img src="data/upload/1/201712/072254170557cdn.png" 这个图片地址就是上一篇讲到的上传图片接口返回的图片地址(相对路径)
三、参考代码
1 1.multipart/form-data这里传的是data参数(上一篇文件上传是files参数) 2 2.这里头部不要加Content-Type: multipart/form-data这个参数,会报错 3 4 ``` 5 # coding:utf-8 6 import requests 7 8 base = 'http://127.0.0.1:81/' # 禅道的服务器地址 9 10 loginUrl = base+"/zentao/user-login.html" 11 12 h = { 13 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0", 14 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 15 "Accept-Language": "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3", 16 "Accept-Encoding": "gzip, deflate", 17 "Referer": "http://127.0.0.1/zentao/user-login.html", 18 # "Cookie": # 头部没登录前不用传cookie,因为这里cookie就是保持登录的 19 "Connection": "keep-alive", 20 "Content-Type": "application/x-www-form-urlencoded", 21 } 22 23 body = {"account":"admin", 24 "password":"e10adc3949ba59abbe56e057f20f883e", 25 "keepLogin[]":"on", 26 "referer":"http://127.0.0.1/zentao/my/" 27 } 28 29 s = requests.session() # 保持会话 30 r = s.post(loginUrl, data=body, headers=h) 31 print r.content # 打印结果看到location='http://127.0.0.1/zentao/my/'说明登录成功了 32 33 # 提交bug 34 url1 = "http://127.0.0.1:81/zentao/bug-create-1-0-moduleID=0.html" 35 f = { 36 "product": "1", 37 "module": "0", 38 "project": "", 39 "openedBuild[]": "trunk", 40 "assignedTo": "admin", 41 "type": "codeerror", 42 "os": "all", 43 "browser": "all", 44 "color": "", 45 "title": "yoyoketang-这是一个bug描述1122", 46 "severity": "3", 47 "pri": "0", 48 "steps": '<p>[步骤]</p>\ 49 <p>1、第一步点</p>\ 50 <p>2、第二步点</p>\ 51 <p>3、点三步点</p>\ 52 <p>[结果]</p>\ 53 <p><img src="data/upload/1/201712/072254170557cdn.png" alt="" /></p>\ 54 <p>[期望]</p>', 55 "story": "0", 56 "task": "0", 57 "mailto[]": "", 58 "keywords": "", 59 "files[]": "", 60 "labels[]": "", 61 "uid": "5a2955c884f98", 62 "case": "0", 63 "caseVersion": "0", 64 "result": "0", 65 "testtask": "0" 66 } 67 r = s.post(url1, data=f) 68 print r.content