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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM