• 软件测试


    在日常的工作当中,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}
    "
               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)

    更多技术文章分享及测试资料点此获取

  • 相关阅读:
    批量刷新远程物化视图的方法(备用)
    Oracle 11g中CTE应用示例
    PL/SQL DEVELOPER中查询结果复制出来中文乱码的解决方案
    RHEL5.5 64位下安装Oracle 11g 64位安装前置条件的两种方法
    不良言论屏蔽方案探讨——自说自话方案
    AWWWB 网站克隆器 v2.0发布
    OneNote中到底能放多少种东西?
    Visual Studio 2010 旗舰版 安装问题小记
    WPF命中测试示例(一)——坐标点命中测试
    网页内嵌Windows Media Player播放器的多文件播放方法
  • 原文地址:https://www.cnblogs.com/hogwarts/p/13994414.html
Copyright © 2020-2023  润新知