通常我們抓包的過程中,都會看到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