python接口自动化15-multipart/form-data表单提交

前言


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

猜你喜欢

转载自www.cnblogs.com/jason89/p/9028669.html