18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 建站知识 > python接口自动化(十八)--重定向(Location)(详解)

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

时间:2023-02-09 01:39:01 | 来源:建站知识

时间:2023-02-09 01:39:01 来源:建站知识

简介
  在实际工作中,有些接口请求完以后会重定向到别的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重定向主要是指主域名主域名http://www.xusseo.com下的二级目录,如http://www.xusseo.com/wap,但是由于wap是一个新的站点,所以正确的域名应该是应该是http://wap.xusseo.com。但是访问的文件夹却是http://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。
好了到此为止,就解决大家的疑问了,有兴趣的小伙伴可以继续往下分析。

为了方便大家在移动端也能看到我分享的博文,现已注册个人微信公众号,扫描左下方二维码即可,欢迎大家关注,有时间会及时分享相关技术博文。
为了方便大家互动讨论相关技术问题,现已组建专门的微信群,由于微信群满100,请您扫描右下方宏哥个人微信二维码拉你进群(请务必备注:进群),欢迎大家加入这个大家庭,我们一起畅游知识的海洋。
感谢您花时间阅读此篇文章,如果您觉得这篇文章你学到了东西也是为了犒劳下博主的码字不易不妨打赏一下吧,让博主能喝上一杯咖啡,在此谢过了!
如果您觉得阅读本文对您有帮助,请点一下左下角“推荐”按钮,您的“推荐”将是我最大的写作动力!另外您也可以选择a href="">【关注我】,可以很方便找到我!
本文版权归作者和博客园共有,来源网址:https://www.cnblogs.com/du-hong 欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利!


http://weixin.qq.com/r/LS8vK3-EtrfKKTtIb3qp (二维码自动识别)

https://u.wechat.com/MMAM8iZlmjp7P6FSjrypXKM (二维码自动识别)



关键词:自动化

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭