我試圖檢查存儲在我的數據庫中的某些URL是否仍然有效鏈接。爲了實現這一點,我使用httplib2來請求HEAD狀態,以避免下載頁面的全部內容。我對結果很滿意。HEAD和GET http請求爲同一個URL返回不同的狀態代碼
但後來我發現了一些使用HEAD請求時返回的狀態碼與GET請求返回的狀態碼不相似的情況。
所以,只要在庫中的缺陷的情況下,我做了不同的庫一些測試(下面是我的「請求」 LIB測試):
> import requests
> rg = requests.get("https://fr.news.yahoo.com/chemin-dames-l-hommage-personnel-pr%C3%A9sident-121005844.html")
> rh = requests.head("https://fr.news.yahoo.com/chemin-dames-l-hommage-personnel-pr%C3%A9sident-121005844.html")
> print("GET status code:", rg.status_code)
('GET status code:', 200)
> print("HEAD status code:", rh.status_code)
('HEAD status code:', 404)
但我使用任何lib下,我仍然有不同的GET &相同URL的HEAD狀態。
所以,很顯然,網站維護者決定不會爲HEAD和GET請求返回相同的狀態代碼......並且即使不推薦也是合法的。
有沒有辦法避免這個問題,並且仍然知道鏈接是否有效,而無需下載我需要驗證的近2百萬個網址的全部內容?
只要在HEAD請求上返回大於400的狀態代碼,但對於我來說這似乎是一個骯髒的工作,我可以仔細檢查GET請求。