领取资料,咨询答疑,请➕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