requests---重定向
Posted qican
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了requests---重定向相关的知识,希望对你有一定的参考价值。
通常我们抓包的过程中,都会看到302的状态码,那么这个过程发生了什么?
什么是重定向
就是通过各种方法将各种网络请求重新定个方向转到其它位置,本来应该从a出发到达b但是最终到达了c,这种场景就叫做重定向了
重定向状态码
说到重定向,肯定少不了http的状态码
300:请求的资源对应于表示形式集合中的某种表示形式,每种表示形式都有自己的特定位置
301:指示已经将资源永久地移动到了某个新位置,并且将来的引用应将新 URI 用于其请求
302:指示已经将资源暂时地移动到了另一个位置,但将来的引用仍应使用原来的 URI 访问该资源。 保留此定义是为了向后兼容。SC_FOUND 现在是首选定义
303:指示可在另一个 URI 之下找到该请求的响应
304:指示条件 GET 操作发现资源可用但不可修改
305:指示必须 通过 Location 字段给定的代理访问请求资源
307:指示请求的资源暂时驻留在另一个 URI 之下。临时 URI 应该 通过响应中的 Location 字段提供
如何处理重定向
当我们遇到这种重定向,我们应该怎么处理?
# request源码中 param allow_redirects: (optional) Boolean. Enable/disable GET/OPTIONS/POST/PUT/PATCH/DELETE/HEAD redirection. Defaults to ``True``. :type allow_redirects: bool
发现requests中默认是True,是允许重定向的。
# coding:utf-8 import requests url = ‘http://github.com‘ # 重定向为False r = requests.get(url,allow_redirects=False) print(r.status_code) print(r.url) 代码结果: 301 http://github.com/
在默认开启的状态下,我们如何知道请求过程中有没有发现重定向呢?
requests返回中history可以帮我们解决
# coding:utf-8 import requests url = ‘http://github.com‘ # 重定向为True r = requests.get(url,allow_redirects=True) print(r.status_code) print(r.history) 代码结果: 200 [<Response [301]>]
发现如果我们允许重定向返回的状态码为200,通过查看历史请求状态码,发现中间请求过301
以上是关于requests---重定向的主要内容,如果未能解决你的问题,请参考以下文章