body curl命令测试post_接口测试实战| GET/POST 请求区别详解

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

GET、POST 的区别总结请求行的 method 不同;

POST 可以附加 body,可以支持 form、json、xml、binary等各种数据格式;

从行业通用规范的角度来说,无状态变化的建议使用 GET 请求,数据的写入与状态建议用 POST 请求;

演示环境搭建

为了避免其他因素的干扰,使用 Flask 编写一个简单的 Demo Server。安装flask

pip install flask创建一个 hello.py 文件

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 hellp():

#拿到request参数

query = request.args

#El request form

post = request.form

#分别打印拿到的参数和form

return f"query: {query}\n"\

f"post: {post}"启动服务

export FLASK_APP=hello.py

flask run

提示下面信息则表示搭建成功。

* Serving Flask app "hello.py"

* Environment: production

WARNING: Do not use the development server in a production environment. Use a production WSGI server instead.

* Debug mode: off

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

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://127.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: 127.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; charset=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: ImmutableMultiDict([])

POST 请求过程

* 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: Wed, 01 Apr 2020 08:15:08 GMT

<

{ [102 bytes data]

* Closing connection 0

query: ImmutableMultiDict([('a', '1'), ('b', '2')])

post: ImmutableMultiDict([('c', '3'), ('d', '4')])

对两个文件进行对比:

从图中可以清楚看到 GET 请求的 method 为 GET,POST 请求的 method 为 POST,此外,GET 请求没有 Content-Type 以及 Content-Length 这两个字段,而请求行中的 URL 带有 query 参数,是两种请求都允许的格式。(End)

--福利福利--

--推荐阅读--

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值