如何使用python请求正确发布json作为多部分表单数据

时间:2017-05-30 11:18:01

标签: python python-3.x python-requests

我项目的开发人员已从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]自动

0 个答案:

没有答案