目录

  • 前言
  • 1 接口简介
  • 2 代码实现
    • 2.1 自动重定向
    • 2.2 跟随重定向

前言

我将在本文中简单介绍使用python进行接口测试时,遇到302重定向时的一些测试心得。

本文涉及实例中的一些关键信息不便透漏,已作遮挡处理,不影响整体。

1 接口简介

首先,我们通过Fiddler抓包工具来分析一下请求的完整过程。

#1 GET请求,请求结果200。发起GET请求,返回下一步请求所需的data(以A和B代指)以及cookies(SESSION);(这里遇到过一个坑,就是在代码中发起请求后并未获取返回的cookies,在下一步请求的时候即使提交了表单数据也一直被当做新的请求,会返回新的参数A/B)

GET请求的返回header和RAW


#41 POST请求,返回结果302。通过POST请求提交表单数据(包含用户名、密码、验证码、上一步获取的随机参数以及一些固定参数),返回重定向地址Location;(这里也有一个坑,我们抓包后在RAW查看到data中的密码是经过转义后的,如果直接在代码中使用就会报错,因此我们需要在WebForms中去查看原始的密码)

POST请求头

POST请求的返回结果

#42 GET请求,返回结果302。向上一步的Location地址发起GET请求,获得登录cookies以及登录后的页面地址Location;
GET请求

GET请求的结果

#43 GET请求,返回结果200。最后一次GET请求,登录成功,不再截图演示。

2 代码实现

2.1 自动重定向

首先来看一下完整代码:

使用自动重定向的时候非常简单,只需要默认使用requests库的get和post即可。

line12-19:分别定义get_request和post_request两个函数执行Get和POST请求,get时只需使用url即可,而post需要url,data以及cookies发起请求。

接下来看主函数:
line26:通过get_request函数发起请求,将返回结果保存在get_result中;
line27-28:通过re模块使用正则表达式从get_result中提取参数A和B(因为re匹配后返回的是list,所以加上[0]表示取第一个结果);
line29:使用requests自带的函数*.cookies.get_dict()即可获取返回结果中的cookies并以字典类型保存;
line33:拼接下一步POST所需的data;
line42:通过post_request函数发起post请求即可,requests库会自动处理后续的重定向过程。

2.2 跟随重定向

有的接口需要登录后才可进行测试时,我们通常会保存登录时的cookies带入后续接口的请求中。但当登录使用了302重定向时,使用自动重定向的方法我们无法获取登录的cookies,这个时候跟随重定向的意义就体现出来了。下面我们来看一下完整的代码:

引用的库一样,依旧是requestsre

line11-18:get_request函数新增了cookies和allow_redirects参数,post_request函数新增了allow_redirects参数。跟随重定向的关键就在于allow_redirects参数,设置为False的时候则是跟随重定向,默认情况下为True;
line45:使用*.headers['Location']获取post请求后返回的重定向地址;
line50:使用获取的重定向地址发起GET请求;
line53:获取登录页面的重定向地址;
line54:获取登录的cookies;
line58:通过GET请求登录成功。

至此,两种302重定向的测试方法介绍完毕。

[Win+Python]使用python接口测试时302重定向的两种处理方法相关推荐

  1. android 毫秒 计时器,Android时分秒计时器的两种实现方法

    可能我们在开发中会时常用到计时器这玩意儿,比如在录像的时候,我们可能需要在右上角显示一个计时器.这个东西其实实现起来非常简单. 只需要用一个控件Chronometer,是的,就这么简单,我都不好意思讲 ...

  2. python keyerror5种方法_Python操作dict时避免出现KeyError的几种解决方法

    在读取dict的key和value时,如果key不存在,就会触发KeyError错误,如: t = { "a": "1", "b": &qu ...

  3. python ioc di_Spring介绍,IOC(控制反转),DI(依赖注入)介绍及两种注入方法

    Spring介绍,IOC(控制反转),DI(依赖注入)介绍及两种注入方法 第一中方法:在xml文件中注入: (1)开源的轻量级的应用开发框架 特点:a.简化开发:b.解耦:c.集成: 原理对象与对象之 ...

  4. 运用Python爬取二手房价格与信息的两种常用方法

    最近房地产市场进一步收紧,多地地方政府出台各种收紧政策,以保证房地产健康发展,因此云朵君就想到运用Python网络爬虫,抓取部分房产信息,了解下最近房地产的情况. 接下来以房天下二手房信息,以获取某个 ...

  5. Python计算程序运行时间秒级/毫秒级的两种方法datetime和time

    Python计算程序运行时间秒级/毫秒级的两种方法datetime和time 简单粗暴,先上代码: import datetime import time# 方法一:datetime.datetime ...

  6. 输出九九乘法表——python(两种解决方法,嵌套循环的使用)

    用python输出九九乘法表 --------------------两种解决方法 在平时做题时会遇到让我们输出九九乘法表对于这类问题我们可以先做出输出一个直角三角行的形状,在以上的基础上就行代码的修 ...

  7. python 两种排序方法 sort() sorted()

    python中有两种排序方法,list内置sort()方法或者python内置的全局sorted()方法 区别为: sort()方法对list排序会修改list本身,不会返回新list.sort()只 ...

  8. 基于python实现车辆测速两种的方法

    基于python实现车辆测速两种的方法 姓名:黄镜轩 院系:机电工程学院 班级:车辆工程1班 联系方式:QQ - 3326078070 本文参考了: 案例-使用python实现基于opencv的车辆识 ...

  9. 笔记本无法使用计算机,电脑Win快捷键失灵不能用的两种处理方法

    运行电脑时如果不想用鼠标点,或者鼠标不好用的时候,那么Win快捷键就派上用处了,比如Win+ E打开任务管理器,Win+A打开操作中心,能解决不少繁琐事情.有时候键盘中两个Win键失灵了都不能用,相信 ...

最新文章

  1. 六月第一枪:股市震荡,下一步该做什么?
  2. java的actionevent_[java]ActionEvent事件:获取输入字符串的长度
  3. 你在做大数据?你有目标么?
  4. mysql将多个成绩放在一排_mysql巧用连表查询各科成绩前三名
  5. java如何画百分比圆环_canvas绘制百分比圆环进度条
  6. thinkphp5 memcached 安装、调用、链接
  7. *第六周*数据结构实践项目一【建立顺序栈算法库】
  8. 31.URL 管理(2)
  9. shell 逐行读取文件
  10. 正在搜索需要的文件_搜索电脑文件,只需要0.01s
  11. ButterKnife 8.6.0 使用
  12. 小米路由器3无线网连接到服务器,小米路由器3怎么连接硬盘
  13. apache php 无法读取网络邻居共享文件的处理,提权
  14. EVEREST的使用教程
  15. Matlab 批量读取,处理及保存图片
  16. 因特尔显卡自定义分辨率_为什么从最新的英特尔显卡控制面板中移除了自定义分辨率?...
  17. vscode web版,走到哪用到哪
  18. 使用 *号在分别在控制台输出一个平行四边形、等腰三角形、菱形
  19. k8s集群搭建(亲测有效)
  20. 【基于MapReduce的成绩分析系统】——计算每门课程的平均成绩、最高成绩、最低成绩

热门文章

  1. 2.5 Visio2007不规则图形填充
  2. 谷歌浏览器关闭跨域限制,允许跨域请求,设置允许访问本地文件
  3. 盖国强:Oracle12c新特性设计与开发实现
  4. 广西区计算机二级vb net考试
  5. [笔记分享] [SCons] Qualcomm SCons User Guide
  6. 第三章 对著作权的限制
  7. autohotkey 编译
  8. 排序-------简单选择实现(Java实现)
  9. Opensuse 13.2安装百度云客户端
  10. 【英语】大学英语CET考试,阅读部分1(阅读概述,SectionC仔细阅读140)