如果你需要测试少量http请求,以获取返回信息,python3提供了很多库可以使用。最简单的json格式的GET或者POST请求包可以用如下方法构建。
python+requests实现接口测试 get 和post_晓翔仔的博客-CSDN博客
如果你的HTTP请求格式是multipart/form-data,消息体里有boundary分隔行,那该怎么办么?
http协议本身的原始方法不支持multipart/form-data请求,这个请求由原始方法演变而来的。multipart/form-data的基础方法是post,也就是说是由post方法来组合实现的
请求头必须包含一个特殊的头信息:Content-Type,必须为multipart/form-data,同时还一个内容分割符 (boundary) 用于分割请求体中的多个post的内容。因为接收方解析和还原文件必须要根据这个boundary。
需要发送的包的结果是这样的
Connection": Keep-Alive
Content-Type: "multipart/form-data;boundary=---------------------------123
-----------------------------123
Content-Disposition: form-data; name="MAPPARAM"
Content-Type: application/json
firstid: 123
secondid: 456
thirdid: 789
-----------------------------123
Content-Disposition: form-data; name="files"; filename="zipfilename.zip"
Content-Type: application/octet-stream
contentofzipfile
-----------------------------123
我们的python代码可以这样写
import requests
from requests_toolbelt import *、
if __name__ == '__main__':
headers={}
headers['Connection'] = 'Keep-Alive'
multipart_form_data = MultipartEncoder(
fields={"MAPPARAM": (None, '{"firstid":"123","secondid":"456","thirdid":"789"}','application/json'),
"files": ('zipfilename.zip', open('zipfilename.zip', 'rb'), 'application/octet-stream')
},
boundary="---------------------------123"
)
req = requests.post('http://upload.sitename.com/balabala.php',data=multipart_form_data, headers=headers)
print(req.status_code)
这里,boundary把HTTP包体分为了两个部分,因为我们在fields里用两行分别表示两个部份。
每个部分的Content-Type写在每个最后一项。
name="”中的名字用作fields的key。
参考文章: