python中requests库的post请求4种类型参数
⽤python来验证接⼝正确性,主要流程有4步:
1 设置url
2 设置消息头
3 设置消息体
4 获取响应
5 解析相应
6 验证数据
Content-Type的格式有四种:分别是application/x-www-form-urlencoded(这也是默认格式)、application/json、text/xml以及multipart/form-data格式。
(⼀)application/x-www-form-urlencoded数据格式
请看代码:
datas = {'parameter1':'12345','parameter2':'23456'}
r = requests.post('example',data=datas)
t)
print(r.status_code)
解说:Reqeusts⽀持以application/x-www-form-urlencoded数据格式发送post请求,只需要将请求的参数构造成⼀个字典,然后传给requests.post()的data参数即可。
(⼆)application/json数据格式
application/json格式的请求头是指⽤来告诉服务端post过去的消息主体是序列化后的 JSON 字符串。
请看带代码:
url = 'ample/post'
s = json.dumps({'key1': 'value1', 'key2': 'value2'})
r = requests.post(url, data=s)
print (r.text)
区别:
这⾥我们可以发现Requests模拟post请求时,请求头格式为application/x-www-form-urlencoded与application/json的主要差别在于请求主体的构造格式(前者是键值对,后者是JSON串),前者直接⽤字典传⼊,后者⽤json.dumps()函数将字典转为JSON串即可。
(三)text/xml数据格式
请看代码:
xml = """my xml"""
headers = {'Content-Type': 'application/xml'}
requests.post('ample', data=xml, headers=headers)
或者把xml作为⼀个⽂件来传输:
import requests
def request_ws(request):
with open(archivo_request,"r") as archivo:
request_data = ad()
target_url = "127.0.0.1:8000/?wsdl"jsessionid
headers = {'Content-type':'text/xml'}
data_response = requests.post(target_url, data=request_data, headers=headers)
(四)multipart/form-data数据格式
除了传统的application/x-www-form-urlencoded表单,我们另⼀个经常⽤到的是上传⽂件⽤的表单,这种表单的类型为multipart/form-data,
multipart/form-data主要⽤于⽂件上传,当我们使⽤它时,必须让 form表单的enctype 等于 multipart/form-data
直接来看⼀个请求⽰例,主要:
请看代码(实现上传本地的⽂件):
import requests
files = {"file": open("C:/Users/Administrator/", "rb")}
r = requests.post("/post", files=files)
)
具体请看实际例⼦:
import requests
import json
# 设置URL
url = "demo.9meikf/usystem/auto/getAnswer.do"
# 设置消息头
headers = {
"Cookie":"JSESSIONID=EA01FF2B025861F39E29712C97F7DF69;CASTGC=",    "Content-Type":"application/json"
}
# 设置消息体
data = {"companyId":"48622",
"nodeId":6,
"question":"不需要",
"templateId":"c6f5ad67fc2c11e8a11800163e086942"}
# 获取相应
response=requests.post(url,headers=headers,data=json.dumps(data))
print("Status code:",response.status_code)
)
# 解析相应
info=response.json()
# 验证数据
assert str(info['answer'])=='reject'