python中requests.post方法中的data和json的区别

在通过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 转码。

Python,可以使用`requests.post`方法来发送POST请求。有几种不同的用法可以根据你的需求选择。 第一种方式是使用`x-www-form-urlencoded`格式的数据发送POST请求。你可以使用一个字典来表示要发送的数据,然后将该字典作为`data`参数传递给`requests.post`方法。例如: ```python import requests url = "https://editor.net/" data = {"key": "value"} # 字典格式,外层无引号 resp = requests.post(url, data=data) print(resp.text) ``` 第二种方式是使用Python模拟浏览器发送POST请求。你可以使用`requests.post`方法,并通过`data`参数传递要发送的数据。与第一种方式不同的是,该参数可以接受字符串作为输入。例如: ```python import requests url = "https://editor.net/" data = '{"key": "value"}' # 字符串格式 resp = requests.post(url, data=data) print(resp.text) ``` 除了上述两种方式,还可以使用`json`参数来发送POST请求。你可以将要发送的数据转换为JSON格式的字符串,并将其作为`data`参数传递给`requests.post`方法。例如: ```python import requests url = "https://editor.net/" data = {"key": "value"} # 字典格式 resp = requests.post(url, json=data) print(resp.text) ``` 以上就是Python`requests.post`方法的用法。你可以根据不同的需求选择适合的方式来发送POST请求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [python requests post 使用方法](https://blog.csdn.net/qq_42777433/article/details/105829795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值