Requests教程-11-重定向与请求历史

领取资料,咨询答疑,请➕wei:  June__Go

上小节中,我们学习了requests的Session会话对象,本小节我们讲解一下requests的重定向与请求历史。

重定向的定义:

重定向(Redirect)就是通过各种方法将各种网络请求重新定个方向转到其它位置(如:网页重定向、域名的重定向、路由选择的变化也是对数据报文经由路径的一种重定向)。

重定向的使用场景:

1.网站调整(如改变网页目录结构

2.网页被移到一个新地址

3.网页扩展名改变(如应用需要把.php改成.Html或.shtml)

这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。

重定向划分:

301 redirect---》永久性重定向、302 redirect---》暂时性重定向,比如下图的302永久性重定向

默认情况下,requests发送的请求除了方式为HEAD之外,其余的请求例如GET、POST等都是能自动进行重定向的。

请求历史与重定向追踪

关于请求历史记录,requests库提供了history属性来保存每次请求的历史记录。可以通过查看response.history列表来获得之前经过的重定向路径。示例如下

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1"
}

r = requests.get("http://www.360buy.com", headers=headers)

print("历史请求过程信息:")
print(r.history)
for one_info in r.history:
    print(one_info.status_code, one_info.url, one_info.headers)

print("\n\n最后一次的请求信息:")
print(r.status_code, r.url, r.headers)

运行结果如下:

历史请求过程信息:
[<Response [301]>, <Response [302]>]
301 http://www.360buy.com/ {'Server': 'nginx', 'Date': 'Wed, 03 Jan 2024 09:38:25 GMT', 'Content-Type': 'text/html', 'Content-Length': '178', 'Connection': 'keep-alive', 'Location': 'http://www.jd.com/', 'Age': '1342', 'Via': 'http/1.1 ORI-CLOUD-HUZ-MIX-16 (jcs [cRs f ]), http/1.1 AHwuhu-UNI-1-MIX-168 (jcs [cSsSfU])', 'Access-Control-Allow-Origin': '*', 'Timing-Allow-Origin': '*', 'X-Trace': '301-1704273363325-0-0-0-0-0;301-1704274705923-0-0-0-1-1;301-1704274705917-0-0-0-22-22'}
302 http://www.jd.com/ {'Server': 'nginx', 'Date': 'Wed, 03 Jan 2024 09:38:25 GMT', 'Content-Type': 'text/html', 'Content-Length': '138', 'Connection': 'keep-alive', 'Location': 'https://www.jd.com/', 'Timing-Allow-Origin': '*', 'X-Trace': '302-1704274705996-0-0-0-0-0', 'Strict-Transport-Security': 'max-age=3600'}


最后一次的请求信息:
200 https://www.jd.com/ {'Server': 'nginx', 'Date': 'Wed, 03 Jan 2024 09:38:26 GMT', 'Content-Type': 'text/html; charset=utf-8', 'Content-Length': '61627', 'Connection': 'keep-alive', 'Vary': 'Accept-Encoding', 'init-worker-firstscreen': 'off', 'init-worker-mobile-ua-check': 'on', 'init-worker-mobile-ua-check-rate': 'on', 'init-worker-forbid-method': 'on', 'init-worker-ump-reffer': 'on', 'init-worker-pageconfig': 'on', 'init-worker-jsversion': 'on', 'init-worker-jsversion-new': 'on', 'init-worker-miaoshaRefreshTime': 'on', 'init-worker-navitems-hide-switch': 'on', 'init-worker-double-cookie-white-list': 'on', 'init-worker-double-cookie-switch': 'on', 'init-worker-image-layer-switch': 'on', 'init-worker-page-maxAge': 'on', 'Cache-Control': 'max-age=60', 'Expires': 'Wed, 03 Jan 2024 09:39:00 GMT', 'Origin-Agent-Cluster': '?0', 'Content-Encoding': 'gzip', 'ser': '8.69', 'X-Content-Type-Options': 'nosniff', 'X-XSS-Protection': '1; mode=block', 'X-Frame-Options': 'SAMEORIGIN', 'Age': '11', 'Via': 'http/1.1 ORI-CLOUD-HUZ-MIX-29 (jcs [cMsSfW]), http/1.1 JS-UNI-2-MIX-222 (jcs [cRs f ])', 'Timing-Allow-Origin': '*', 'X-Trace': '200-1704274695501-0-0-16-47-47;200-1704274695455-0-0-0-71-71;200-1704274706057-0-0-0-1-1', 'Strict-Transport-Security': 'max-age=3600'}


重定向的重启和禁用

在发送请求的时候,可以通过如下的设置,取消/重启requests模块的自动重定向功能

requests.get(url, allow_redirects=False)

其中,allow_redirects字段为True时代表开启重定向,requsets默认为True,为False时代表禁用重定向,以下是禁止重定向的一个示例

import requests
r = requests.get('http://github.com', allow_redirects=False)
print(r.status_code)
print(r.history)

运行结果如下:

301
[]

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走,希望可以帮助到大家!领取资料,咨询答疑,请➕wei:  June__Go

  • 12
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值