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

news/2024/11/23 9:55:12/

简介

 

   在实际工作中,有些接口请求完以后会重定向到别的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-82 import requests3 # 请求头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.ppmy.cn/news/734441.html

相关文章

自动驾驶OS市场的现状及未来

站在车企的角度看,QNX有点像Mobileye——尽管“易用”,但限制了车企的自主性;而Linux则有点像英伟达——比较“难用”,但赋予了车企很大的自主权及面向未来的兼容性。 随着车企对软件技术投入的加大和能力的提升,Linux…

分布式事务与数据一致性

文章目录 一、分布式全局id1、分库分表引发的id问题2、解决id问题(1)UUID(2)统一ID序列生成(使用mycat生成id)(3)雪花算法 二、分布式事物1、基本理论(1)CAP原…

接口与自动化测试

一、什么是接口? 接口就是API,意思是应用程序编程接口 接口本质上程序开发的函数和方法,提供参数和返回值 二、接口组成的要素什么? 接口访问的地址、请求的方法、参数、返回值 接口访问的地址 协议://IP地址或域名:端口号/应用名/功能名 请…

[架构之路-118]-《软考-系统架构设计师》-软架构设计-11-可靠性相关设计

第11节 可靠性相关设计 11.1 可靠性基本概念 可靠性工程是研究产品生命周期中故障的发生、发展规律,达到预防故障,消灭故障,提高产品可用性的工程技术。 信息系统的可靠性是指系统在满足一定条件的应用环境中能够正常工作的能力,可…

前端面试-高级篇

一、JavaScript进阶 #1 内置类型 JS 中分为七种内置类型,七种内置类型又分为两大类型:基本类型和对象(Object)。基本类型有六种: null,undefined,boolean,number,strin…

面向2022届毕业生-自动驾驶/SLAM/DL/C++ 岗位收集整理

收集整理 Created by leijobs876gmail.com 目标方向: C/C 开发Andorid 开发深度学习部署自动驾驶感知与定位ROS机器人开发 文章目录 收集整理**目标方向:**方向完全一致: 总体结果1、秋招进展框图 1、互联网1、京东 *2、网易 *3、百度 *4、字…

2021最新一线互联网大厂常见高并发面试题解析

(一)高并发编程基础知识 这里涉及到一些基础的概念,我重新捧起了一下《实战 Java 高并发程序设计》这一本书,感觉到心潮澎湃,这或许就是笔者叙述功底扎实的魅力吧,喜欢。 作为阅读福利,我把大厂…

Cannot find tomcat-9.0.0.M21/bin/setclasspath.sh

问题描述:将linux上的tomcat直接拷贝到以一个路径下,执行sh startup.sh 报错 解决:修改全局变量配置文件 1、vim /etc/profile (主要修改如下图所标记的值 ) 2、source /etc/profile (设置环境变量立即…