在实际工作中,有些接口请求完以后会重定向到别的url,而你却需要重定向前的url。
1、请求转发
该动作是服务器行为,在web容器中进行的,客户端对于跳转是不知道的,地址栏中显示的URL是不会变化的,因为请求转发中是一次请求,相同的request,可以在请求中设置属性对象(setAttribute())来实现数据共享
request.getRequestDispatcher(URL).forward(request,response);
2、请求重定向(sendRedirect,也称为间接的请求转发)
该动作是客户端行为,服务器会向客户端返回一个301状态码并携带一个Location属性表名应请求的地址,然后客户端按照服务器返回的地址重新发送请求,地址栏中显示的URL是会变化的因为请求重定向中是两次不同的请求request,无法实
现数据共享
response.sendRedirect(URL);
重定向
常见的重定向分为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)
默认情况下,allow_redirects=True是启用重定向的。
获取重定向后地址
1.在无权限请求后,服务器会下发一个新的请求链接,在response的headers里,如fiddler抓包的Location
2.代码试下获取Location地址
---------------------------------------------------------------------------------------------------------------------------
咱们查看源码,requests.get,get的源码;pycharm中通过ctrl+鼠标左键可以定位到方法的位置。
kwargs是字典类型,setdefault的作用是给字典键名allow_redirects赋值。