写点什么

软件测试 | GET 和 POST 区别与实战

  • 2023-02-21
    北京
  • 本文字数:1497 字

    阅读完需:约 5 分钟

HTTP 中使用最多的就是 GET 和 POST 这两种请求方式。掌握这两种请求方式的原理,以及两种请求方式的异同,也是之后做接口测试的一个重要基础。

1.GET 和 POST 的区别

(1)请求方法不同


(2)POST 可以附加 body,可以支持 Form、JSON、XML、Binary 等数据格式


(3)从行业通用规范的角度来说,如果对数据库操作不会产生数据变化,如查询操作,建议使用 GET,添加数据操作使用 POST 请求。

2.演示环境搭建

为了避免其他因素的干扰,下面使用 Flask 编写一个简单的演示程序,创建一个简易的服务。

(1)安装 Flask

pip install flask
复制代码

(2)创建一个 hello.py 文件

from flask import Flask, requestapp = Flask(_name_)
@app.route('/')def hello_world(): return 'hello,World!' @app.route("/request",methods=['POST','GET'])def hello(): #获取到request参数 query = requert.args #获取到request form post = request.from #分别打印获取到参数和from return f"query:{query}\n"\ f"post:{post}"
复制代码


(3)启动服务

export FLASK_APP=hello.pyflask run
复制代码

下面的信息表示服务搭建成功:

* Serving Flask app"hello.py"* Environment: production  WARNING: Do not use the development server in a production enviroment.  Use a production WSGI server instead.* Debug mode: off* Running on http://127.0.0.1:5000/(Press CTRL+C to quit)
复制代码

3.用 CURL 发起 GET 和 POST 请求

发起 GET 请求,把 a、b 参数放入 URL 中发送,并保存在 get 文件中。

curl 'http://127.0.0.1:5000/request?a=1&b=2' -v  -s  &>get
复制代码

发送 POST 请求,把 a、b 参数以 form-data 格式发送,并保存在 post 文件中。

curl 'http://1270.0.0.1:5000/request?' -d  "a=1&b=2"  -v  -s  &>post
复制代码

GET 和 POST 请求对比

注:>的右边为请求内容,<右边为响应内容

GET 请求过程:

* Trying 127 0.0.1...* TCP_NODELAY set* Connected  to 127.0.0.1 (127 0.0.1) port 5000(#0)> GET /request?a=1&b=2 HTTP/1.1> Host: 1270.0.0.1:5000> User-Agent: curl/7.64.1> Accept:*/*> * HTTP 1.0,assume close after body< HTTP/1.0 200 OK< Content-Type: text/html; charse=utf-8< Content-Length: 80< Server: Werkzeug/0.14.1 Python/3.7.5< Date:Wed,01 Apr 2020 07 35:42 GMT<{ [80 bytes data]*Closing connection 0query: ImmutableMultiDict([('a','1'),('b','2')])post: ImmutableMultiDit([])}
复制代码


PODT 请求过程:

*  Trying 127.0.0.1...* TCP_NODELAY set* Connected to 127.0.0.1(127.0.0.1) port 5000 (#0)> POST /request?a=1&b=2 HTTP/1.1> Host:127.0.0.1:5000> User-Agent: curl/7.64.1> Accept:*/*> Content-Length:7> Content-Type: application/x-www-form-urlencoded>} [7 bytes data]* upload completely sent off: 7 out of 7 bytes* HTTP 1.0,assume close after body< HTTP/1.0 200 OK< Content-Type: text/html;charset=utf-8< Content-Length: 102< Server: Werkzeug/0.14.1 Python /3.7.5< Date: Web,01 Apr 2020 08:15:08 GMT< { [102 bytes data ]*Closing connection 0query:ImmutableMultiDict([('a','b'),('b','2')])post: ImmutableMultiDict([('c','3'),('d','4')])}
复制代码


两个文件对比的结果如图 6-25 所示。

从图 6-25 中可以清除地看到,GET 请求和 POST 请求用的请求方法不同,前者是 GET 请求,后者是 POST 请求。此外,GET 请求中没有 Content-Type 和 Content-Length 这两个字段,而请求行中的“/request/?a=1&b=2” 带有 query 参数,是两种请求都允许的格式。


搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核


用户头像

社区:ceshiren.com 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
软件测试 | GET和POST区别与实战_测试_测吧(北京)科技有限公司_InfoQ写作社区