如何从python CGI脚本中引发http错误/异常?

时间:2009-10-29 15:19:01

标签: python web-applications cgi

如何从python CGI脚本中引发http错误/异常?

所有必要的是打印适当的标题:

print '''Status: 501 Not Implemented
Content-type: text/html

'''

这似乎不正常。

我有一个非常基本的设置,即IIS7路由* .py CGI脚本到python25.exe执行。我没有使用任何WSGI或FastCGI。使用“普通”CGI模块:cgitbcgi

3 个答案:

答案 0 :(得分:3)

这似乎就是这样做的方式。只要您正确遵循标题格式。

这是其他人或多或少地提出同样问题的人。

Returning http status codes in Python CGI

打印状态代码时是否遵循HTTP规范?您可以尝试仅打印状态代码而不是其描述吗?

也许就像......

print '''Status:501
Content-type: text/html

'''

或者它应该像......

print '''HTTP/1.1 501 Not Implemented
Content-type: text/html

'''

您可以使用您的设置进行测试以验证吗?

从CGI返回状态:

http://oreilly.com/openbook/cgi/ch03_07.html

我猜“状态:501未实现”,就像你原来的那样。我不知道为什么它不起作用。您是否在打印状态代码之前打印任何非标题内容?

另一个来源证实你做得对(见6.3.3节):

http://www.ietf.org/rfc/rfc3875

编辑1,2,3:扩展答案

答案 1 :(得分:2)

使用以下代码启动您的脚本:cgitb.enable() 然后在异常使用期间输出正确的错误代码:

try:
  blah blah failed code
except:
  print "Status: 500"
  cgitb.handler()

答案 2 :(得分:0)

Python CGI returning an http status code, such as 403?

有一个答案建议:

  

sys.stdout('状态:403   禁止\ r \ n \ r \ N')

     

在技术上可能更正确,   根据RFC(假设你的   CGI脚本未在文本模式下运行   在Windows上)。但两行结尾   似乎无处不在。

但是,因为你在Windows上这样做,而你没有用状态行结束标题......

sys.stdout('Status: 501 Not Implemented\n')

我不明白为什么使用sys.stdout会很重要,因为print应该使用stdout。