python接口自动化(十八)--重定向(Location)(详解)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python接口自动化(十八)--重定向(Location)(详解),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4218字,纯文字阅读大概需要7分钟。
内容图文
![python接口自动化(十八)--重定向(Location)(详解)](/upload/InfoBanner/zyjiaocheng/832/e501a6970c294b3d90373c4c9c6097c9.jpg)
简介
在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url。URL主要是针对虚拟空间而言,因为不是自己独立管理的服务器,所以无法正常进行常规的操作。但是自己又不希望通过主域名的二级目录进行访问,而
是希望通过主域名的二级域名进行访问。所以这个时候就会用到URL重定向。
重定向过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器 ”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览
器”。可见,“浏览器”一共发出了两封信和收到了两次回复,“ 浏览器”也知道他借到的钱出自李四之手。具体可以通过 HttpServletResponse.sendRedirect 实现。
RequestDispatcher.forward 方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“ 浏览器”的人写信找张三借钱,张三没有钱,于
是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。可见,“浏览器”只 发出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。
1、请求转发(requestDispatcher)
该动作是服务器行为,在web容器中进行的,客户端对于跳转是不知道的,地址栏中显示的URL是不会变化的,因为请求转发中是一次请求,相同的request,可以在请求中设置属性对象(setAttribute())来实现数据共享
request.getRequestDispatcher(URL).forward(request,response);
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)+
内容总结
以上是互联网集市为您收集整理的python接口自动化(十八)--重定向(Location)(详解)全部内容,希望文章能够帮你解决python接口自动化(十八)--重定向(Location)(详解)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。