2009-10-29 32 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()