簡體   English   中英

HTTP 404狀態代碼(未找到)顯示為302

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM