请求代码如下:
import requests
import json
data = {"name":"desk","age":18}
headers = {'Content-Type': 'text/html',"charset":"UTF-8"}
r = requests.post(url, params=json.dumps(data),headers=headers)
服务器那边收到的数据为urlencode过的数据,并不是json串:%7b%22name%22%3a%22desk%22%2c%22age%22%3a18%7d
即自动执行了urlencode,RequestEncodingMixin类中_encode_params(data)方法中
if isinstance(data, (str, bytes)):
return data
elif hasattr(data, 'read'):
return data
elif hasattr(data, '__iter__'):
result = []
for k, vs in to_key_val_list(data):
if isinstance(vs, basestring) or not hasattr(vs, '__iter__'):
vs = [vs]
for v in vs:
if v is not None:
result.append(
(k.encode('utf-8') if isinstance(k, str) else k,
v.encode('utf-8') if isinstance(v, str) else v))
return urlencode(result, doseq=True)
else:
return data
解决办法:
r = requests.post(url, json=data,headers=headers)