HTTP 中使用最多的就是 GET 和 POST 这两种请求方式。掌握这两种请求方式的原理,以及两种请求方式的异同,也是之后做接口测试的一个重要基础。
1.GET 和 POST 的区别
(1)请求方法不同
(2)POST 可以附加 body,可以支持 Form、JSON、XML、Binary 等数据格式
(3)从行业通用规范的角度来说,如果对数据库操作不会产生数据变化,如查询操作,建议使用 GET,添加数据操作使用 POST 请求。
2.演示环境搭建
为了避免其他因素的干扰,下面使用 Flask 编写一个简单的演示程序,创建一个简易的服务。
(1)安装 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 参数,是两种请求都允许的格式。
搜索微信公众号:TestingStudio 霍格沃兹的干货都很硬核
评论