Python requests.post方法中data与json参数区别

requests.post()方法
源码如下:

def post(url, data=None, json=None, **kwargs):
    r"""Sends a POST request.

    :param url: URL for the new :class:`Request` object.
    :param data: (optional) Dictionary (will be form-encoded), bytes, or file-like object to send in the body of the :class:`Request`.
    :param json: (optional) json data to send in the body of the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response ` object
    :rtype: requests.Response
    """

    return request('post', url, data=data, json=json, **kwargs)

可以看到,参数中明确的参数有datajson
datajson既可以是str,也可以是dict
区别如下:

  • 不管jsonstr还是dict,如果不指定headers中的content-type,默认为application/json
  • datadict时,如果不指定content-type,默认为application/x-www-form-urlencoded,相当于普通form表单提交的形式,此时数据可以从request.POST里面获取,而request.body的内容则为a=1&b=2的这种形式,注意,即使指定content-type=application/json,request.body的值也是类似于a=1&b=2,所以并不能用json.loads(request.body.decode())得到想要的值
  • datastr时,如果不指定content-type,默认为application/json

content-type=application/json下,获取值的方法如下:

json.loads(request.body.decode())

你可能感兴趣的:(Python requests.post方法中data与json参数区别)