我们在做自动化测试时,难免会遇到form-data格式的数据,我们经常遇到需要解析表单数据(form-data)的情况。form-data通常用于HTTP请求中,尤其是POST方法提交的数据。在本博客中,我们将探讨如何在Python中解析multipart/form-data类型的数据,并提供几个代码示例来详细说明这一过程。
FormData的数据在postman中是很容易请求的,直接选中form-data填写参数名和参数值就可以,但是python处理就没有那么直接了,需要对这种数据进行处理。
在Python中,我们需要先安装requests_toolbelt库,并从requests_toolbelt导入MultipartEncoder库
第一个问题就是请求头的 boundary 值问题,这是一个随机值
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarytZTJQrWcjjcJIMVQ
我们要是想自己随机生成一个boundary,可以直接用下面的代码,先把你的请求参数转化成字典格式,为了给boundary提供参数,直接上代码:(记得把parameters 改成你自己的参数)
from requests_toolbelt import MultipartEncoder
class MultipartEncoderNew:
def __init__(self):
self.multipart_encoder = self.make_multipart_encode()
def make_multipart_encode_fields(self):
"""
用于生成multipart_encoder 的fields字段
:return fields: multipart_encoder 的fields字段
"""
parameters = {'data': {
"username": "test",
"password": "123456"}
}
fields = parameters
if fields is None or fields == {}:
return fields
else:
for item in fields.items():
# 字典类型转为Json
if isinstance(item[1], dict):
fields[item[0]] = json.dumps(item[1])
return fields
def make_multipart_encode(self, boundary=None):
default_boundary = ''.join(random.sample(string.ascii_letters + string.digits, 30))
multipart_encoder = MultipartEncoder(
boundary=boundary if boundary else default_boundary,
fields=self.make_multipart_encode_fields()
)
return multipart_encoder
if __name__ == '__main__':
a = MultipartEncoderNew()
print(a.make_multipart_encode())
# 直接打印出来的结果就是把你之前入的参数parameters转化成MultipartEncoder格式的数据了
#<MultipartEncoder: {'data': '{"username": "test", "password": "123456"}'}>
我们如何在接口中使用
图中是我自己的项目编写,仅供参考,主要是要注意header的“Content-Type"的传参还有接口请求的data的取值,大家结合自己的项目去填写就可以了
可以看到我的接口是可以请求通的
本文就暂时分享到这啦,如果对你有帮助可以点赞评论收藏哦~~~,后续有新的内容也会继续更新的,欢迎交流讨论