如何从python CGI脚本引发http错误/异常?如何从python CGI脚本引发http错误/异常?
是所有必要的是打印适当的头:
print '''Status: 501 Not Implemented
Content-type: text/html
'''
似乎不是工作的权利。
我有一个非常基本的设置,即IIS7路由* .py CGI脚本到python25.exe执行。我没有使用任何WSGI或FastCGI。使用“正常”CGI模块:cgitb
和cgi
如何从python CGI脚本引发http错误/异常?如何从python CGI脚本引发http错误/异常?
是所有必要的是打印适当的头:
print '''Status: 501 Not Implemented
Content-type: text/html
'''
似乎不是工作的权利。
我有一个非常基本的设置,即IIS7路由* .py CGI脚本到python25.exe执行。我没有使用任何WSGI或FastCGI。使用“正常”CGI模块:cgitb
和cgi
看起来就是这样做的方式。只要你正确地遵守标题格式。
以下是其他人或多或少地询问过相同的问题。
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:扩展答案
Python CGI returning an http status code, such as 403?
建议有一个答案:
sys.stdout('S tatus:403 禁止\ r \ n \ r \ n“)
可能在技术上更正确, 根据RFC(假设你 CGI脚本是不是在文本模式下 在Windows上运行)。然而,两个行结尾 似乎无处不在。
但是,既然你在windows上这样做,你不结束与状态行头...
sys.stdout('Status: 501 Not Implemented\n')
我不明白为什么使用sys.stdout会很重要,虽然打印应该使用stdout。
与启动脚本:cgitb.enable()
然后输出异常使用过程中正确的错误代码:
try:
blah blah failed code
except:
print "Status: 500"
cgitb.handler()
我想这可能有助于提供您的设置。你在运行什么Web服务器以及你在使用什么模块?你在使用FastCGI吗? 什么库提供访问CGI环境变量等?它是否也提供了处理HTTP事务的方法? – EMPraptor 2009-10-29 15:32:44
我更新了这个问题,以表明我仅仅为Python和IIS7一起使用了cgi和cgitb模块。没什么特别的。 – 2009-10-29 15:55:44