在日常的工作当中,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 bodyHTTP/1.0 200 OKContent-Type: text/html; charset=utf-8Content-Length: 80Server: Werkzeug/0.14.1 Python/3.7.5Date: Wed, 01 Apr 2020 07:35:42 GMT<{ [80 bytes data]* Closing connection 0query: 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 bodyHTTP/1.0 200 OKContent-Type: text/html; charset=utf-8Content-Length: 102Server: Werkzeug/0.14.1 Python/3.7.5Date: Wed, 01 Apr 2020 08:15:08 GMT<{ [102 bytes data]* Closing connection 0query: 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)

推荐学习

推荐霍格沃兹出品《测试开发从入门到高级实战系统进阶》课程,贴近大厂一线实践内容深度行业领先。

4 个月由浅入深,强化集训,测试大咖思寒领衔主讲,授之以渔,通过 10+ 企业级项目实战演练,带你一站式掌握 BAT 测试开发工程师必备核心技能(对标阿里巴巴P6+,挑战年薪50W+)!学员直推 BAT 名企测试经理,普遍涨薪 50%+!

戳“阅读原文”,提升自己的核心竞争力吧!

bat怎么发起网络请求_接口测试实战| GETPOST 请求区别详解相关推荐

  1. axios请求接口http_使用axios请求接口,几种content-type的区别详解

    axios的使用 安装(一般使用框架的话, 脚手架都集成了) $ npm install axios 请求示例 // POST axios.post('/user', { firstName: 'Fr ...

  2. java controller注解原理_@Controller、@RestController注解区别详解

    @Controller.@RestController注解区别: @RestController 注解相当于 @Controller + @ResponseBody 合在一起的作用. 一.@Contr ...

  3. 工业相机与民用相机的区别_工业相机和普通相机的区别详解

    在机器视觉迅猛发展的今天,工业相机作为机器视觉的核心组件已得到广泛应用,但是很多初学者还是搞不清楚究竟工业相机与普通相机有什么区别.下面小编就带大家一起去看看工业相机和普通相机的区别吧! 工业相机 一 ...

  4. RocketMQ实战系列-RocketMQ命令详解

    导语   之前分析了关于RocketMQ源码的东西,接下来的阶段就是进入到实战的相关系列操作中,在这个系列中也会继续从源码的角度入手,深入的分析,在RocketMQ中的编程思想.下面就来介绍一下在Ro ...

  5. 网络套接字编程之IO模型详解

    网络套接字编程之IO模型详解 本文主要参考自<UNIX网络编程>(第1卷)(套接口API第3版) Unix下可用的五种I/O模型有: 阻塞式I/O 非阻塞式I/O I/O复用(select ...

  6. Redis实战和核心原理详解(4)Redis存储Key的一种设计实现方式:模式匹配

    注意:此方案仅为演示Redis 的使用,正式生产环境切勿使用! 相关文章: Redis实战和核心原理详解(1)Centos7.0下安装Redis 5.0详细过程和使用常见问题 Redis实战和核心原理 ...

  7. Stale branches 设置_Mac OS 网络设置教程 wifi设置与宽带设置详解

    虽然所有设备连接无线网络的步骤都相差无几,但是Mac与windows系统还是不相同的,那么,苹果Mac怎么连接无线网络呢?针对此问题,本文就为大家介绍Mac网络的设置教程,有兴趣的朋友们可以了解下. ...

  8. OpenCV-Python实战(10)——详解 OpenCV 轮廓检测

    OpenCV-Python实战(10)--详解 OpenCV 轮廓检测 0. 前言 1. 轮廓介绍 2. 轮廓检测 3. 轮廓压缩 4. 图像矩 4. 1 一些基于矩的对象特征 4.2 Hu 不变矩 ...

  9. 如何获取请求端真实IP和远程主机IP详解

    如何获取请求端真实IP和远程主机IP详解 需求背景 一.Remote_Addr 情况 一: 情况二: java中获取Remote_Addr的api 二.X-Forwarded-For java中获取X ...

  10. 网络编程中的SO_REUSEADDR和SO_REUSEPORT参数详解

    1.SO_REUSEADDR: 在BSD中,SO_REUSEADDR选项有两个用户: 如果有socket绑定了0.0.0.0:port:设置该参数后,其他socket可以绑定本机ip:port.(该功 ...

最新文章

  1. camera raw 滤镜预设_Camera Raw中利用预设实现批量化调色,PS这款滤镜真的很好用...
  2. 程序员转型AI,成功几率有几分?
  3. 谷歌简单粗暴“复制-粘贴”数据增广,刷新COCO目标检测与实例分割新高度
  4. PIX配置手册三(nat)
  5. 【原】Linux find 命令整理
  6. go 调用etcd实现分布式锁
  7. SHELL脚本实现硬盘分区
  8. opencv mat初始化_【OpenCV入门之十二】看起来一样的图像竟然存在这么大的差别!...
  9. Python数模笔记-模拟退火算法(4)旅行商问题
  10. 地线与接地螺丝_电气接地的规范要求及接地的各项参数,收藏!
  11. python程序发布 ubuntu_将Windows项目发布到Ubuntu服务器详细教程(Windows编程,Ubuntu服务器做解释器)...
  12. 拳王虚拟项目公社:知识付费之出售虚拟教程资源赚钱,小白轻松赚钱的方式
  13. 直接插入_折半插入(python)
  14. Chrome unable load NTKO control
  15. VMware出现“该虚拟机似乎正在使用中”问题
  16. QQ自带截图功能(你想不到的强大, 必看,长截图/翻译/文本识别/钉在桌面/录屏)
  17. Unity Shader - 伪次表面散射模拟
  18. Codeforces 869E. The Untended Antiquity (二维Fenwick,Hash)
  19. sku这样设置不仅降低退款投诉还可以提升转化
  20. Excel文件导入导出操作

热门文章

  1. Firefox 网页 光标 闪烁
  2. [K/3Cloud]创建一个操作校验器
  3. 受宠的背后:安全市场面临重新洗牌
  4. Why does getView return wrong convertView objects on BaseAdapter?
  5. React native真机调试
  6. zabbix 创建触发器
  7. bios开发 c语言,BIOS开发环境
  8. .dat文件写入byte类型数组_不可不知的可变Java长数组
  9. linux中安装mysql_Linux下安装MySQL
  10. python小球弹跳_python实现小球弹跳效果