我试图验证一个域名是否返回200、301或302的http状态。我遇到了域名无效的情况,但是返回200状态,因为ISP劫持404响应并将其重定向到专有搜索页面。这使得域名在不合法的情况下显得有效。
>>> r = requests.head(url='http://defdoesnotexist123.com', allow_redirects=False)
>>> r.status_code
200
>>> r.url
u'http://defdoesnotexist123.com/'在这种情况下,用户实际上被重定向到http://finder.cox.net,而不是看到404页。是否有办法检查这一点,以便我可以让我的逻辑失败,并认为域名无效?
发布于 2015-12-30 22:14:12
DNS失败是,而不是,是404错误。404要求有一个实际的可解析域和一个服务器响应,这意味着路径不存在,但是服务器存在。您的ISP正在拦截DNS故障,这是在涉及HTTP之前发生的错误情况,而404是HTTP错误代码。
如果ISP拦截所有DNS记录并将您重定向到一个新的URL,请查找Location标头:
r = requests.head('http://defdoesnotexist123.com')
if 'finder.cox.net ' in r.headers.get('location', ''):
# domain doesn't actually exist, redirected to the catch-all page注意,默认情况下,requests.head()将allow_redirects设置为False,不需要显式设置它。
https://stackoverflow.com/questions/34537568
复制相似问题