Python3伺服器提供cgi的功能
Python31可以藉由下方指令,把當前的目錄做為網頁伺服器的根目錄,運行網頁服務:
1
|
|
但是上述指令不包括支援CGI的功能,如果需要CGI的功能,必需使用:
1
|
|
不過,CGI的檔案不是任何地方都可以放置,基本上Python3的模組,預設需放在當前目錄下的cgi-bin
或htbin
這兩個目錄中2, 才會被視為CGI,否則,會當作檔案直接下載,或者,以文字的方式直接顯示檔案裡的程式內容3。
檔案目錄的結構示意圖:
另外,CGI裡,輸出的前兩行文字必需含有如下內容:
1
|
|
或者:
1
|
|
也就是說,輸出的內容必需有Content-Type: text/html
外加一個空行4。 不然,瀏覽器只會獲得一個空白的內容。
然後,必需把檔案改為可執行檔。
這邊就以一個php檔案作為CGI內容的例子為結尾:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
-
本來練習網頁一直都是用python當作簡易伺服器,但是直到需要使用php,才發現python不會自動去運行php的內容,雖然這個問題只要改用php自身的簡易伺服器就可以解決了:
php -S 127.0.0.1:8000 -t.
。但是,總會不服氣,為何php可以,python沒道理不行。↩ -
python3的
http.server
模組預設http.server.CGIHTTPRequestHandler.cgi_directories=[‘/cgi-bin’, ‘/htbin’]
,如果想要改動放cgi程式的資料夾,就得重新設定這個屬性,比如說改成CGI
這個目錄:http.server.CGIHTTPRequestHandler.cgi_directories=[‘/CGI’]
↩ -
以
.pl
或.py
結尾的副檔名 會顯示內容;.php
則會直接下載檔案。↩ -
當初看python3的範例上寫
print(“Content-Type: text/html\n”)
就自作聰明的以為python3預設是會在字串結束的地方加上換行符號,應該不用再多餘的添加\n
,結果沒想到是還多需要一個空白行,而卡在這邊很久。↩