python - 为什么我的 Django 站点在使用此 URL 解析器检查时不返回 404?

标签 python django web-applications

这是一个简单的 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/

相关文章:

python - 在 sympy 中进行符号集成的快速方法是什么

python - 如何更深入地了解 Watson Discovery Service 中文档摄取失败的原因

mysql - Django Raw Query SQL 注入(inject)显示攻击

Django rest-auth注册。使用 token 认证时如何通过 key 返回user_id

python - Discord Python 机器人 : Levels and EXP System

python - 使用 Django 项目在 Docker 中创建 postgresql 数据库

python - Django 不迁移应用程序

java - 调用操作后页面不刷新

iis - IIS:如何从命令行取消部署/删除/删除Web应用程序?

mysql - SQL表中的数据如何分离