专栏首页测吧测试开发软件测试 - 接口测试实战 | GET/POST 请求区别详解
原创

软件测试 - 接口测试实战 | GET/POST 请求区别详解

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

GET、POST 的区别总结

  1. 请求行的 method 不同;
  2. POST 可以附加 body,可以支持 form、json、xml、binary等各种数据格式;
  3. 从行业通用规范的角度来说,无状态变化的建议使用 GET 请求,数据的写入与状态建议用 POST 请求;

演示环境搭建

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

  1. 安装flask
pip install flask
  1. 创建一个 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}"
  1. 启动服务
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)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • REST-assured 获取日志到文件并结合 Allure 报告进行展示

    使用 Rest-assured 集合 Allure 运行完用例之后,在生成的报告中只有断言信息,没有请求的日志信息。而当我们的用例失败时,特别是接口失败时,请求...

    霍格沃兹测试开发
  • 测试面试题集锦(三)| 计算机网络和数据库篇(附答案)

    本系列文章总结归纳了一些软件测试工程师常见的面试题,主要来源于个人面试遇到的、网络搜集(完善)、工作日常讨论等,分为以下十个部分,供大家参考。如有错误的地方,欢...

    霍格沃兹测试开发
  • 快速搞定 uiautomator2 自动化测试工具使用

    Google 官方提供了一个 Android 自动化测试工具(Java 库),基于 Accessibility 服务,功能很强,可以对第三方 App 进行测试,...

    霍格沃兹测试开发
  • 谷歌大脑小姐姐亲授:如何应聘成功羡煞旁人的AI工程师岗位

    不如听听过来人怎么说。最近,谷歌大脑的小姐姐Catherine Olsson上了一堂名企应聘公开分享,手把手教你应该以怎样的姿势开始AI安全类工程师求职之旅。

    量子位
  • 极客手中的利器Electron

    作为一个前端开发人员,你可能已经听说过Electron了,你知道VS Code是基于这个技术开发的。不但VS Code,

    liulun
  • music-php:全网音乐搜索和下载

    在 releases 页面中下载 music-php 或者 music-php.phar 文件。

    猿哥
  • web安全:通俗易懂,以实例讲述破解网站的原理及如何进行防护!如何让网站变得更安全。

    本篇以我自己的网站为例来通俗易懂的讲述网站的常见漏洞,如何防止网站被入侵,如何让网站更安全。

    小曾看世界
  • 创业半年公司估值4亿,他的梦想是“人人都能成为AI科学家”

    数据猿
  • 代码的终结,我们很快就能像调教狗一样来调教我们的计算机

    在发明计算机之前,大部分的实验心理学家都认为大脑是一个不可知的黑盒子。你可以分析一个实验对象的行为,例如,一旦听到铃铛想起,狗便会分泌唾液。但是思想、记忆和情绪...

    用户1667431
  • 前端设计模式之代理模式

    代理模式的定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。

    Cookieboty

扫码关注云+社区

领取腾讯云代金券