python接口自动化(十八)--重定向(Location)(详解)

news2024/11/27 12:59:19

简介

   在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url。URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作。但是自己又不希望通过主域名的二级目录进行访问,而

是希望通过主域名的二级域名进行访问。所以这个时候就会用到URL重定向。

  重定向过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器 ”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览

器”。可见,“浏览器”一共发出了两封信和收到了两次回复,“ 浏览器”也知道他借到的钱出自李四之手。具体可以通过 HttpServletResponse.sendRedirect  实现。  

  RequestDispatcher.forward 方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“ 浏览器”的人写信找张三借钱,张三没有钱,于

是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只 发出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

1、请求转发(requestDispatcher)

该动作是服务器行为,在web容器中进行的,客户端对于跳转是不知道的,地址栏中显示的URL是不会变化的,因为请求转发中是一次请求,相同的request,可以在请求中设置属性对象(setAttribute())来实现数据共享

request.getRequestDispatcher(URL).forward(request,response);

如果你想学习接口自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a

2、请求重定向(sendRedirect,也称为间接的请求转发)

该动作是客户端行为,服务器会向客户端返回一个301状态码并携带一个Location属性表名应请求的地址,然后客户端按照服务器返回的地址重新发送请求,地址栏中显示的URL是会变化的因为请求重定向中是两次不同的请求request,无法实

现数据共享

response.sendRedirect(URL);

重定向

  URL重定向主要是指主域名主域名www.xusseo.com下的二级目录,如www.xusseo.com/wap,但是由于wap是一个新的站点,所以正确的域名应该是应该是wap.xusseo.com。但是访问的文件夹却是www.xusseo.com/wap,这种访问则被

称之为重定向。

常见的重定向分为301重定向和302重定向。重定向是一种比较特别的优化方式,因为需要通过代码来实现,从而变相提高权重值。所以在特殊情况下,如果使用重定向过于严重,则会被搜索引擎判定为不是正当的优化。

1、301重定向代表永久性转移(Permanently Moved)

301重定向被称之为永久性重定向,主要是针对一些永久性更改的网站,而且这种重定向一旦做好,将会对网站的优化大有好处。

2、302重定向代表暂时性转移(Temporarily Moved )

302重定向的使用并不多见,它通常被称之为暂时性的转移。302重定向的使用常见于meta重定向和JavaScript重定向。而这种重定向是典型的不正当行为,很容易被搜索引擎发现,并将其重定向的网址定义为不合法网站,做出惩罚。

3、以博客园举个简单的场景案例,先登录博客园打开我的博客首页,进入任意一个页面都可以,在这里进我的随笔编辑界面,记住这个地址:https://i.cnblogs.com/EditPosts.aspx?opt=1

4.退出博客园登录,把刚才我的随笔这个地址https://i.cnblogs.com/EditPosts.aspx?opt=1输入浏览器回车,抓包会看到这个请求状态码是 302,浏览器地址栏瞬间刷新跳到登录首页去了

禁止重定向(allow_redirects)

1、用 get 方法请求:https://i.cnblogs.com/EditPosts.aspx?opt=1

2、打印状态码是 200,这是因为 requets 库自动处理了重定向请求了,这里留作疑问。聪明的你一定或许猜到了,不知道的后边带你去解密,笔者就喜欢抽丝剥茧的那种感觉,带你一层一层揭开它神秘的面纱

3、自动处理重定向地址后,我们就获取不到重定向后的 url 了,就无法走下一步,这里我们可以设置一个参数禁止重定向:allow_redirects=False(allow_redirects=True 是启动重定向),然后就可以看到 status_code 是 302 了

获取重定向后地址

1、在第一个请求后,服务器会下发一个新的请求链接,在 response 的 headers 里,如下抓包:Location

2、代码实现获取Location 地址

3、参考代码

 1 # coding:utf-8
 2 import requests
 3 # 请求头
 4 headers = {
 5     "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
 6 }
 7 s = requests.session()
 8 # 打开我的随笔
 9 r = s.get('https://i.cnblogs.com/EditPosts.aspx?opt=1',
10 headers=headers,
11 allow_redirects=False,
12 verify=False)
13 # 打印状态码,自动处理重定向请求
14 print (r.status_code)
15 new_url = r.headers["Location"]
16 print (new_url)

 小结

  在工作和学习中,我们不仅需要知其然,还必须知其所以然。前边留的疑问或许你已经查资料知道其原因了。我这里还是用老办法,看源码!看源码!看源码!重要的事说三遍。

1、从get方法入手

我们知道使用requests的get方法传入url就可以访问此网站,但是这个过程是怎么做的呢,今天就带着这个疑问对其进行进一步探究。

打开pycharm,在pycharm中通过ctrl(command)+🖱️左键我们可以定位到方法的位置。

我们首先进入sessions.py文件,看到get方法如下:

可以发现该方法就两句话

先看第一句,kwargs.setdefault('allow_redirects', True),下面我们来说说kwargs在这里的用处

2、kwargs

kwargs是字典类型,setdefault的作用是给字典键名allow_redirects赋值,如果该键不存在,赋给其默认值,也就是第二参数True。

好了到此为止,就解决大家的疑问了,有兴趣的小伙伴可以继续往下分析。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/724199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux下make和makefile的使用方法

1.make和makefile的区别 make是指令,makefile是文件,这是两者的却别。两者搭配使用,完成项目自动化创建。 2.make原理 make是如何工作的,也就是在默认情况下,我们只输入make命令,那么 1.make会在当前目录下…

Python基础:函数和函数式编程

文章目录 函数和函数式编程函数函数式编程 函数和函数式编程 函数 声明函数: def hello():print("hello function!")调用函数: # 使用()调用 hello()#output:hello function!# 没有(),则不进行调用,一切皆是对象&am…

Spring + Spring MVC + MyBatis+Bootstrap+Mysql酒店管理系统源码

IDEASpring Spring MVC MyBatisBootstrapMysql酒店管理系统源码 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.会员信息管理3.客房信息类型管理4.客房信息管理5.客房信息添加6.预定信息管理7.入住信息管理8.入住信息添加 三、部分代码UserMapper.javaUserController.j…

MySQl数据库第四课-------------努力------努力------努力

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com —————————————————————————————————— 目录 sudo whoami who exit reboot、shutdown 软件安装 编辑器vim ————————————————————————…

9.2.2 【Linux】按键说明

第一部份:一般指令模式可用的按钮说明,光标移动、复制贴上、搜寻取代等 第二部份:一般指令模式切换到编辑模式的可用的按钮说明 第三部份:一般指令模式切换到命令行界面的可用按钮说明

公网远程连接Redis数据库「内网穿透」

文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 转载自cpolar极点云文章:公网远程连接Red…

Python_列表比较大小

比较原理 从第一个元素顺序开始比较,如果相等,则继续,返回第一个不相等元素得比较结果。如果所有元素比较均相等,则长的列表大,一样长则两列表相等。 示例 a [5, 6, 3] b [5, 4, 3, 1] # 返回第1个不相等同位元素…

计算机图形硬件(二) 5 - 3 图形工作站和观察系统、输入设备

1 图形工作站和观察系统 目前,大多数图形监视器以光栅扫描显示的方式工作,一般使用 CRT或平板系统。图形系统的范围从小型通用计算机系统到多监视器及超大幅面观察屏幕。个人计算机的屏幕分辨率从640x480到1280x1024屏幕对角线从12英寸到21英寸。多数通…

基于STM32的300W无刷直流电机驱动方案

如何驱动无刷电机? 近些年,由于无刷直流电机大规模的研发和技术的逐渐成熟,已逐步成为工业用电机的发展主流。围绕降低生产成本和提高运行效率,各大厂商也提供不同型号的电机以满足不同驱动系统的需求。现阶段已经在纺织、冶金、…

【macOS 系列】下载brew或其他依赖包提示连接超时的问题解决

在下载brew或其他依赖包提示连接超时 错误信息: curl: (7) Failed to connect to [raw.githubusercontent.com](http://raw.githubusercontent.com/) port 443 after 34 ms: Connection refused最简单的方式,就是修改DNS:为114.114.114.114…

网络互联设备(集线器、交换机、路由器)

文章目录 一、中继器和集线器二、网桥和交换机1)交换机的三种转发方式2)交换机的分类3)交换机互连方式 三、路由及路由器1)路由器的作用2)路由器的逻辑结构3)路由器的硬件组成4)路由器启动过程 …

【遍历】LeetCode二叉树的遍历、深度系列

文章目录 LeetCode题号104. 二叉树的最大深度111. 二叉树的最小深度144. 94. 二叉树的前序、中序遍历(DFS遍历)589. 589. N 叉树的前、后序遍历543. 二叉树的直径102. 二叉树的层序遍历 LeetCode题号 简单 104. 二叉树的最大深度(DFS遍历法分…

C# RotationDetector 图片旋转角度检测

效果 项目 VS2022.net4.8 OpenCvSharp4Sdcb.RotationDetector 代码 using OpenCvSharp; using Sdcb.RotationDetector; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using …

项目设计集合(人工智能方向):助力新人快速实战掌握技能、自主完成项目设计升级,提升自身的硬实力(不仅限NLP、知识图谱、计算机视觉等领域)

优质项目专栏:提升自身的硬实力:汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户更好利用 CSDN 平台,自主完成项目设计升级,提升自身的硬实力。 专栏订阅:项目大全提升自身的硬实力…

2023MWC精彩回顾 | 未来数字世界中的社交,游戏与娱乐

6月28日至6月30日,由GSMA主办的2023 MWC 上海世界移动通信大会(简称“MWC 上海”)启幕。「Paraverse平行云」参与组织并主持了本次大会中【未来数字世界中的社交,游戏与娱乐】的主题会议。 「Paraverse平行云」携手上海交通大学、…

中国物流,驶入大航海时代

出海的一体化,不仅仅是物流的一体化,更是产业链、供应链的一体化。在诸多问题下,想要帮助企业更好地出海,就不能只专注于自身的长板,而是需要先补齐短板。 作者|斗斗 编辑|皮爷 出品|产业家 出海时代真的要来了。…

CSAPP fall2015 深入理解计算机系统 lab1 datalab详解

Data Lab data lab 数据实验 这个数据实验请在linux机器上面运行,实测mac m1本跑不起来。windows没试过。 centos上需要安装好gcc运行环境。 如果跑不起来记得安装下面这个东西: yum -y install glibc-devel.i686 运行make btest的时候可能会有warni…

药物设计学笔记:导论篇

笔记来自《药物设计学》 文章目录 1.药物设计概述 1.药物设计概述 药品(medicine) 药物(durg) 辅料,药物是研究对象 留意 medicine 和 drug 的区别 药物来源包括天然来源和人工来源,前者如吗啡&#xff0…

Oracle数据库软件安装与卸载

Oracle数据库软件安装与卸载 实验目的及要求 学习Oracle12c数据库服务器软件和客户端软件的安 装与卸载,掌握客户端服务名的设置,建立客户端与服务器的网络连接,熟悉windows操作系统中Oracle相关服务的操作。理解数据库管理的基本架构。 (1)熟悉Oracle…

网讯wx1860接yt8521phy千兆网口调试

问题描述:网讯1860接yt8521phy出一路电口和3路光口都不通。 问题分析:影响网口不通一般有三个因素导致:固件、驱动、硬件。 固件:对于网口不通一般先确认固件是否烧写正确,咨询网讯FAE后将固件更新为:SF4…