我项目的开发人员已从apllication/json
迁移到multipart/form-data
。
因为我想重建我的api测试,但我有一个问题,发布json对象与multipart/form-data
例如简单登录请求:
json从应用程序发送登录(application/json
):
{
"session": {
"email": "john_doe@example.com",
"password": "examplepassword"
}
}
通过multipart / form-data转换发布到
--Boundary+.....
Content-Disposition: form-data; name="session[email]"
john_doe@example.com
--Boundary+.....
Content-Disposition: form-data; name="session[password]"
examplepassword
--Boundary+.....
如果我理解正确并且开发人员批准他们仍然发送相同的json对象,但当app作为multipart / form-data发布时,app会自动形成它。他们使用AFnetworking
我为多部分发布创建了下一个功能
def post_request_multipart_with_status_and_response(self, endpoint, data):
request_post = requests.post(self.domain + "%s" % endpoint, files=data, headers=self.header)
status = request_post.status_code
requests_post_json = request_post.json()
return status, requests_post_json
仅供参考:我只在requests.post
内添加了带有自动化令牌的标头。我不会尝试设置我的边界或内容类型,因为我知道请求会自行处理它。
当我向其发送下一个数据时 - 一切都很酷:
data = {
"session[email]": (None, "john_doe@example.com"),
"session[password]": (None, "examplepassword")
}
但如果我尝试将json发送到其中:
data = {
"session": {
"email": "john_doe@example.com",
"password": "examplepassword"
}
}
data = {(None, json.dumps(data))
}
然后以另一种方式发送
Content-Type: multipart/form-data; boundary=AAAbbbCCCd
'
send: b'--AAAbbbCCCd
Content-Disposition: form-data;
{"session": {"password": "examplepassword", "email": "john_doe@example.com"}}
--8a78b52e98d34fecae72d054e577c8ad--
'
所以我希望requests
将它作为普通表单数据发送的内容进行拆分,并将其作为每个节点的单独multipart
字段添加。当我通过data = { "session": { "email": "john_doe@example.com", "password": "examplepassword" } }
时。请求将自行解决此嵌套结构。喜欢这个session[email]
和此session[password]
自动