[英]HTTP 404 status code (Not Found) shown as 302
我正在嘗試使用以下代碼片段來檢索python中的URL列表的HTTP狀態代碼:
try:
r = requests.head(testpoint_url)
print(testpoint_url+" : "+str(r.status_code))
# prints the int of the status code.
except requests.ConnectionError:
print("failed to connect")
令人驚訝的是,對於某些URL,我得到302
狀態代碼,而如果被瀏覽器瀏覽,您會看到它顯示404代碼!
到底是怎么回事? 如何獲取真實狀態代碼(例如404)?
302是HTTP重定向。 Web瀏覽器將按照重定向到“ Location
響應標頭中報告的URL。 當請求下一個URL時,它將具有自己的響應代碼,其中可以包括404。
您的Python代碼沒有遵循重定向,這將解釋為什么它獲得原始302的原因。
根據請求文檔:
默認情況下,Requests將對除HEAD以外的所有動詞執行位置重定向。
我們可以使用Response對象的
history
屬性來跟蹤重定向。
Response.history
列表包含為完成請求而創建的Response
對象。 該列表按從最早到最新的響應排序。...
如果您使用的是GET,OPTIONS,POST,PUT,PATCH或DELETE,則可以使用
allow_redirects
參數禁用重定向處理:>>> r = requests.get('https://github.com/', allow_redirects=False) >>> r.status_code 301 >>> r.history []
如果您使用的是HEAD,則還可以啟用重定向 :
>>> r = requests.head('https://github.com/', allow_redirects=True) >>> r.url 'https://github.com/' >>> r.history [<Response [301]>]
因此,在您的代碼中,更改以下內容:
r = requests.head(testpoint_url)
對此:
r = requests.head(testpoint_url, allow_redirects=True)
然后,在遵循所有重定向之后, r.status_code
將是最終狀態代碼(即404)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.