我正在尝试验证域名是否返回200,301或302的http状态。我遇到域名无效的情况,但是因为ISP劫持404而返回200状态响应并将其重定向到专有搜索页面。这使得域名看起来有效,而不是。
>>> 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页面。有没有办法检查这个,以便我可以让我的逻辑失败并认为域名无效?
答案 0 :(得分:1)
DNS失败不 404错误。 404要求有一个实际的可解析域和服务器响应,这意味着路径不存在,但服务器确实存在。您的ISP正在拦截DNS故障,这是在涉及HTTP之前发生的错误情况,而404是HTTP错误代码。
如果您的ISP拦截所有DNS记录并将您重定向到新网址,请查找int
标题:
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
,您无需明确设置。