【问题标题】:How to abort a Python script and return a 404 error?如何中止 Python 脚本并返回 404 错误?
【发布时间】:2017-06-10 16:19:06
【问题描述】:

我正在编写一个 Python 脚本来预处理 SVG 文件。我将 URL 称为:

http://example.com/includesvg.py?/myfile.svg

如果myfile.svg 不存在,我希望脚本“includesvg.py”返回404 错误。我已经尝试过:

print "Status: 404 Not Found\r\n"
print "Content-Type: text/html\r\n\r\n"
print "<h1>404 File not found!</h1>"

它不起作用。

这一定是一个重复的问题,但是“Python”和“404”的问题太多了,我找不到现有的答案。

【问题讨论】:

  • Ehm,这甚至不是一个有效的 HTTP 标头。没有Status 字段,返回状态的工作方式不同。
  • 我知道这不是一个有效的 HTTP 标头,这就是我问这个问题的原因。
  • 是的,我明白了。请看下面我的回答。无论如何,所有有效的 HTTP 标头字段都有一个 Wikipedia 文章,您可以添加更多内容。

标签: python apache http-headers http-status-code-404


【解决方案1】:

您发送的 HTTP 响应无效。我会选择这个:

print('HTTP/1.1 404 Not Found\r\n')
print('Content-Type: text/html\r\n\r\n')
print('<html><head></head><body><h1>404 Not Found</h1></body></html>')

导致(美化):

HTTP/1.1 404 Not Found
Content-Type: text/html

<html>
  <head>
  </head>
  <body>
    <h1>404 Not Found</h1>
  </body>
</html>

但是,这个也可以:

import sys
sys.stdout('Status: 404 Not Found\r\n\r\n')

作为简化版:

print('Status: 404 Not Found')
print()

希望这会有所帮助!

【讨论】:

  • 如果我先打印“\n”,我只会得到状态为 200 的文本(我在 rexswain.com/cgi-bin/httpview.cgi 进行了检查)。如果我遗漏了“\n”,我会收到服务器错误。
  • 好的,我已经编辑过了。我想这是内置 print 的问题,可以根据需要添加换行符。
  • 同样的问题...如果我在收到 500 服务器错误之前不包括换行符,如果我这样做了,状态会自动设置为 200。任何打印内容的努力都没有前面的换行符导致服务器错误。我将在我的日志中查看确切的错误是什么。
  • 好的,请对您发现的任何错误发表评论。但是,HTTP 响应应该像上面那样构建,这是多年来的标准。如果它也没有帮助,请尝试使用 Notepad++ 之类的编辑器(用于正确的行尾)创建具有正确 HTTP 响应的文件,然后从 Python 中读取并打印它。
  • 我认为问题不在于文本的构造。我认为我缺少的是对 Python 如何输出标题与 Python 如何输出文本的理解。除了“打印”之外,我还必须有一些函数或库需要输出标题。无论如何,谢谢你的帮助。
猜你喜欢
  • 1970-01-01
  • 2011-08-11
  • 2010-09-24
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
  • 2014-01-26
  • 1970-01-01
相关资源
最近更新 更多