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

518 篇文章 3 订阅
514 篇文章 2 订阅

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, request
app = 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.py
flask 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 0
query: 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 0
query: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参数,是两种请求都允许的格式。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值