python+pytest接口自动化(5)-requests发送post请求
【文章末尾给大家留下了大量的福利】
简介
在HTTP协议中,与get请求把请求参数直接放在url中不同,post请求的请求数据需通过消息主体(request body)中传递。
且协议中并没有规定post请求的请求数据必须使用什么样的编码方式,所以其请求数据可以有不同的编码方式,服务端通过请求头中的 Content-Type 字段来获知请求中的消息主体是何种编码方式,再以对应方式对消息主体进行解析。
post请求参数常用的编码方式如下:
-
application/x-www-form-urlencoded # form表单格式,非常常见
-
multipart/form-data # 一般用于上传文件,较为常见
-
application/json # json字符串格式,非常常见
-
text/xml # xml格式
关于post请求参数,后面会有文章专门讲述,这里不做过多的阐述。
requests.post()参数说明
使用requests库提供的post方法发送post请求,requests.post() 源码如下:
-
def post(url, data=None, json=None, **kwargs):
-
r"""Sends a POST request.
-
-
:param url: URL for the new :class:`Request` object.
-
:param data: (optional) Dictionary, list of tuples, bytes, or file-like
-
object to send in the body of the :class:`Request`.
-
:param json: (optional) json data to send in the body of the :class:`Request`.
-
:param \*\*kwargs: Optional arguments that ``request`` takes.
-
:return: :class:`Response <Response>` object
-
:rtype: requests.Response
-
"""
-
-
return request('post', url, data=data, json=json, **kwargs)
参数说明:
-
url,请求网址
-
data,字典、元组列表、字节或要发送到指定URL的文件对象,可选(即可填可不填)
-
json,要发送到指定URL的JSON对象,可选
-
**kwargs,可以添加其他请求参数,如headers、timeout、cookies等
post接口中常用的编码格式在python脚本中对应的请求参数的格式一般就是 dict (字典) 或 json,如 application/x-www-form-urlencoded 格式在python中对应为dict,application/json 在python中对应为json。
因此,接下来分别这种编码格式进行举例。
发送post请求(请求参数格式为dict)
我们以请求TesterHome网的登录接口为例,发送请求参数格式为dict的请求。
请求头中content-type为application/x-www-form-urlencoded;charset=UTF-8
,如下图所示:
那么请求参数编码格式应为dict,代码如下:
-
import requests
-
-
def testerhome_login():
-
# data为请求入参
-
data = {
-
"user[login]": "账号",
-
"user[password]": "密码",
-
"user[remember_me]": 0,
-
"commit": "登录"
-
}
-
headers = {
-
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/53\
-
7.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
-
}
-
url = "https://testerhome.com/account/sign_in"
-
-
# 编码格式为application/x-www-form-urlencoded;charset=UTF-8,所以请求参数为dict,使用data参数
-
res = requests.post(url=url, headers=headers, data=data)
-
print(res.text)
-
print(res.status_code)
-
-
-
if __name__ == '__main__':
-
testerhome_login()
运行结果如下:
由打印出来的返回内容,我们可以判断该接口请求成功。
发送post请求(请求参数格式为json)
这里我用flask框架写了个简单的模拟接口来演示,接口代码如下:
-
from flask import Flask, jsonify, request
-
-
app = Flask(__name__)
-
app.config["JSON_AS_ASCII"] = False
-
-
@app.route("/login", methods=["POST"])
-
def login():
-
username = request.json.get("username").strip()
-
password = request.json.get("password").strip()
-
print(username, password)
-
if username and password:
-
if username == "lilei" and password == "123456":
-
return jsonify(
-
{"code": 1000, "msg": "登录成功!", "token": "sh34ljjl08s32730dj"}
-
)
-
elif username == "hanmeimei" and password == "888888":
-
return jsonify(
-
{"code": 1000, "msg": "登录成功!", "token": "hjf078977l08ert2323k"}
-
)
-
else:
-
return jsonify(
-
{"code": 1001, "msg": "账号或密码错误!"}
-
)
-
else:
-
return jsonify(
-
{"code": 1002, "msg": "账号或密码不能为空!"}
-
)
-
-
if __name__ == '__main__':
-
app.run()
注意需要先安装flask框架,然后运行该模块,具体可参考我之前的文章使用Flask开发简单接口,运行后我们可以看到该接口服务的 host 地址,如下:
这个接口的请求参数格式需要为json,requests.post()请求这个接口代码如下:
-
import requests
-
import json
-
-
headers = {"Content-Type": "application/json;charset=utf8"}
-
url = "http://127.0.0.1:5000/login"
-
_data = {
-
"username": "lilei",
-
"password": "123456"
-
}
-
-
# 这里使用json参数,即json=_data
-
res = requests.post(url=url, headers=headers, json=_data).text
-
# 当然还可以使用data参数,但需先将_data转换为json格式,即data=json.dumps(_data)
-
# json.dumps()将dict格式转换成json格式
-
res = requests.post(url=url, headers=headers, data=json.dumps(_data)).text
-
print(res)
运行结果如下:
总结
post请求因为请求主体编码格式的原因,在使用 requests.post() 时需要根据接口请求头中Content-Type字段,为请求参数选择指定的编码格式,才能发送请求。其实get请求的请求参数也有其对应的编码格式,至于如何确定get、post请求参数的格式,且听下回详解。
重点:学习资料学习当然离不开资料,这里当然也给你们准备了600G的学习资料
【需要的可以扫描文章末尾的qq群二维码自助拿走】
【记得(备注“csdn000”)】
【或私信000】
群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。
项目实战:
大型电商平台:
全套软件测试自动化测试教学视频
300G教程资料下载【视频教程 PPT 项目源码】
全套软件测试自动化测试大厂面经
python自动化测试 全套模板 性能测试
听说关注我并三连的铁汁都已经升职加薪暴富了哦!!!!
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfjbfcj
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13