在通过requests.post()进行POST请求时,传入参数有两个,一个是data,一个是json。那么如何区分他们呢

一,请求头的数据格式为Content-Type=application/json

如果请求头的数据格式为Content-Type=application/json,表明我们要传入的参数是序列化后的 JSON 字符串。然而在python中,我们的参数往往写成以下格式:

data = {
        "loginType": 0,
        "password": "c9e672bfee5ab65ee471e1e0547e01a7",
        "playerAccount": "15872285573",
        "deviceCode": "00-E1-8C-B8-14-4C",
        "deviceSoftVersion": "V1.0.0",
        "platform": 4,
        "platformModel": "1.0",
        "timestamp": 1606273340134
    }

data就是我们要传的参数,python中是以字典的形式存在的,数据类型就是字典,但是传入的数据要求是json格式的字符串,因此传入的时候需要转换。

1. 通过json.dumps将data数据转化成json格式

将我们传入的data参数通过json.dumps转换后就变成了json格式的字符串,如下:

import json
data = {
        "loginType": 0,
        "password": "c9e672bfee5ab65ee471e1e0547e01a7",
        "playerAccount": "15872285573",
        "deviceCode": "00-E1-8C-B8-14-4C",
        "deviceSoftVersion": "V1.0.0",
        "platform": 4,
        "platformModel": "1.0",
        "timestamp": 1606273340134
    }
data_json=json.dumps(data)
print(data_json)
print(type(data_json))

打印出来的结果为:
在这里插入图片描述
格式为json格式,类型为字符串,此时刚好满足application/json的含义,传入的参数就可以用data传参,但是此时必须传入headers=sapplication/json;charset=UTF-8,因为headers请求头表明传入的是序列化的json格式,刚好和转化后的data对应

import requests,json
def login():
    '''通过登录拿到返回的token'''
    url = 'http://10.9.0.128:9999/user/un/login'
    data = {
        "loginType": 0,
        "password": "c9e672bfee5ab65ee471e1e0547e01a7",
        "playerAccount": "15872285573",
        "deviceCode": "00-E1-8C-B8-14-4C",
        "deviceSoftVersion": "V1.0.0",
        "platform": 4,
        "platformModel": "1.0",
        "timestamp": 1606273340134
    }
    data_json=json.dumps(data)
    re = requests.post(url=url, data=data_json,headers={
        "Content-Type":"application/json;charset=UTF-8"
    })
2. data数据不做转换处理

在data数据不做处理的时候,post请求头必须用json参数,请求头headers是否传headers="Content-Type":"application/json;charset=UTF-8",都不影响

import requests,json
def login():
    '''通过登录拿到返回的token'''
    url = 'http://10.9.0.128:9999/user/un/login'
    data = {
        "loginType": 0,
        "password": "c9e672bfee5ab65ee471e1e0547e01a7",
        "playerAccount": "15872285573",
        "deviceCode": "00-E1-8C-B8-14-4C",
        "deviceSoftVersion": "V1.0.0",
        "platform": 4,
        "platformModel": "1.0",
        "timestamp": 1606273340134
    }
    re = requests.post(url=url, json=data)
    print(type(data))
    return re.text

二、请求头的数据格式为application/x-www-form-urlencoded

当请求数据格式为表单的时候,我们的请求数据只能为字典,不能进行转换,传输的格式转换为键值对并按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。

Logo

新一代开源开发者平台 GitCode,通过集成代码托管服务、代码仓库以及可信赖的开源组件库,让开发者可以在云端进行代码托管和开发。旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐