我试图检查存储在我的数据库中的某些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请求。