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

原文地址:https://www.cnblogs.com/qican/p/11233945.html