接口测试实战: GET/POST 请求区别详解

发表于:2021-11-05 09:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:知乎

  在日常的工作当中,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
  2. 创建一个 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}"
  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 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 参数,是两种请求都允许的格式。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号