Python-requests之POST Data的json问题

python requests 阅读:863

请求代码如下:

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)