如何從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