这是一个简单的 python 函数,用于检查给定的 url 是否有效:
from httplib import HTTP
from urlparse import urlparse
def checkURL(url):
p = urlparse(url)
h = HTTP(p[1])
h.putrequest('HEAD', p[2])
h.endheaders()
if h.getreply()[0] == 200:
return 1
else: return 0
这适用于大多数网站,但对于我基于 Django 的网站,即使我输入的网址明显错误,我也会收到 200 状态代码。如果我在浏览器中查看同一页面,则会收到 404 错误。例如,以下页面在浏览器中显示 404 错误:http://wefoundland.com/GooseBumper
但使用此脚本检查时给出 200。为什么?
编辑:虽然 mopoke 的答案从 Django 方面解决了问题,但上面的脚本中也存在一个错误:
而不是解析 url 然后使用
h.putrequest('HEAD', p[2])
我实际上需要在请求中使用 url,如下所示:
h.putrequest('HEAD', url)
解决了这个问题。
最佳答案
虽然内容显示 404,但网站在 header 中返回 200 OK:
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 30 Dec 2009 01:38:24 GMT
Content-Type: text/html; charset=utf-8
Connection: close
确保您的响应使用 HttpResponseNotFound
。例如:
return HttpResponseNotFound('<h1>Page not found</h1>')
关于python - 为什么我的 Django 站点在使用此 URL 解析器检查时不返回 404?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1977938/