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 <Response>` object
:rtype: requests.Response
"""
return request('post', url, data=data, json=json, **kwargs)
可以看到,参数中明确的参数有data
与json
data
与json
既可以是str
,也可以是dict
区别如下:
- 不管
json
是str
还是dict
,如果不指定headers
中的content-type
,默认为application/json
-
data
为dict
时,如果不指定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())
得到想要的值 -
data
为str
时,如果不指定content-type
,默认为application/json
content-type=application/json
下,获取值的方法如下:
json.loads(request.body.decode())