如何从python CGI脚本中引发http错误/异常?
所有必要的是打印适当的标题:
print '''Status: 501 Not Implemented
Content-type: text/html
'''
这似乎不正常。
我有一个非常基本的设置,即IIS7路由* .py CGI脚本到python25.exe执行。我没有使用任何WSGI或FastCGI。使用“普通”CGI模块:cgitb
和cgi
答案 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。