request
a. 客户端向服务端发送多层字典的值
#客户端发送 obj = { 'data':{ "k1":"v1", "k2":"v2" }, 'status': True } #json发送 requests.post("http://www.baidu.com",json=obj) #发送数据内部默认处理(会在内部把字典obj json.dumps序列成字符串,发送给服务端) #body: json.dumps(obj) #headers= {'content-type':'application/json'} #默认加入 #服务端接受上面格式发送的数据 if request.method == 'POST': obj = json.loads(request.body.decode('utf-8'))
b. request.post 和request.body
#接受 requests.boby - 请求体原生的值 requests.POST - 根据特殊的请求头从requests.boby获取数据,不能接受多层字典的数据
c. 三者相等
#方式一: requests.post("http://www.baidu.com",json=obj) #方式二: requests.post( url="http://www.baidu.com", headers={'content-type':'application/json'}, data=json.dumps(obj) ) #方式三(): requests.post( url="http://www.baidu.com", headers={'content-type':'application/json'}, data=bytes(json.dumps(obj),encoding="utf-8") )
d. 一般使用
requests.post( url="", data={"name":"alex","pwd":123}, #把数据解析成 data = "user=alex&pwd=123" headers={'content-type':'application/x-www-form-urlencoded'} )
但不能接受多层字典的数据,接受第二层字典只能接受key,不能接受value
#headers= {'content-type':"application/x-www-form-urlencoded
requests.post( url="", json={"name":"alex"}, #会把数据解析成大的字符串 headers={'content-type':'application/json'} )
request.POST有值得两个条件: 1.请求头要求: 如果 Content_Type = "application/x-www-form-urlencoded",request.POST中才有值(去request.body中解析数据)。 2.数据格式要求: name=alex&age=18&gender=男 如form表单提交: <form>...</form>表单提交数据请求头和数据格式就满足。 如ajax提交: 默认也会把请求头和数据按照上面格式发送 $.ajax({ url:wwww.baidu.com, type:POST, data:{"name":"alex","age":18} #内部转化name=alex&age=18&gender=男 }) request.body有值,request.post没有值 可以去body里面取值,并把字节类型转换为字符串类型。 $.ajax({ url:wwww.baidu.com, type:POST, headers:{"Content_Type":"application/json"}, data:{"name":"alex","age":18} #内部转化name=alex&age=18&gender=男 }) $.ajax({ url:wwww.baidu.com, type:POST, headers:{"Content_Type":"application/json"}, data:JSON.stringfy({"name":"alex","age":18}) #内部转化name=alex&age=18&gender=男 })