HTTPHTTP请求体中的四种格式,requests库发送post请求

Posted Bug挖掘机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTPHTTP请求体中的四种格式,requests库发送post请求相关的知识,希望对你有一定的参考价值。

编码后的字符串

import requests

payload =
report
Overall:良好
Progress: 30%
Problems:暂无

r = requests.post("http://httpbin.org/post",
data=payload.encode(utf8))
print(r.text)

XML

如果设计者决定用 XML 格式传输一段信息,用Requests库,只需要这样

import requests

payload =
<?xml version="1.0" encoding="UTF-8"?>
<WorkReport>
<Overall>良好</Overall>
<Progress>30%</Progress>
<Problems>暂无</Problems>
</WorkReport>


r = requests.post("http://httpbin.org/post",
data=payload.encode(utf8))
print(r.text)

我们要传递的工作报告里面,存在的问题有 多个,用 XML 就可以这样表示

<?xml version="1.0" encoding="UTF-8"?>
<WorkReport>
<Overall>良好</Overall>
<Progress>30%</Progress>
<Problems>
<problem no=1>
<desc>问题1....</desc>
</problem>
<problem no=2>
<desc>问题2....</desc>
</problem>

</Problems>
</WorkReport>

urlencoded

这种格式的消息体就是一种 键值对的格式存放数据,如下所示

key1=value1&key2=value2

如果参数中本身就有特殊字符,比如等号,就会被看成参数的分隔符,只需要将这些键值对的数据填入一个字典。

然后使用post方法的时候,指定参数 data 的值为这个字典就可以了,如下

import requests

#payload ="key1=value1&key2=value2" 可直接传入字符串
payload = key1: value1, key2: value2

r = requests.post("http://httpbin.org/post", data=payload)
print(r.text)

如果我们用工具抓包就可以发现 发送的http请求如下
【HTTP】HTTP请求体中的四种格式,requests库发送post请求_xml

json

构建一个json 格式的字符串,可以使用json库的dumps方法

import requests,json

payload =
"Overall":"良好",
"Progress":"30%",
"Problems":[

"No" : 1,
"desc": "问题1...."
,

"No" : 2,
"desc": "问题2...."
,
]


r = requests.post("http://httpbin.org/post", data=json.dumps(payload))

也可以将 数据对象 直接 传递给post方法的 json参数,如下

r = requests.post("http://httpbin.org/post", json=payload)


以上是关于HTTPHTTP请求体中的四种格式,requests库发送post请求的主要内容,如果未能解决你的问题,请参考以下文章

HTTP Post请求的四种编码方式

你知道web项目中Http请求与响应的四种情况吗

java的四种内部类(转)

jsp的四种范围?

python3+requests:post请求四种传送正文方式(详解)

获取项目根路径的四种方式