2009-10-29 62 views
4

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

是所有必要的是打印适当的头:

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

''' 

似乎不是工作的权利。

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

+0

我想这可能有助于提供您的设置。你在运行什么Web服务器以及你在使用什么模块?你在使用FastCGI吗? 什么库提供访问CGI环境变量等?它是否也提供了处理HTTP事务的方法? – EMPraptor 2009-10-29 15:32:44

+0

我更新了这个问题,以表明我仅仅为Python和IIS7一起使用了cgi和cgitb模块。没什么特别的。 – 2009-10-29 15:55:44

回答

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:扩展答案

0

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。

2

与启动脚本:cgitb.enable() 然后输出异常使用过程中正确的错误代码:

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