首頁  >  文章  >  後端開發  >  什麼是CGI?詳細介紹Python CGI編程

什麼是CGI?詳細介紹Python CGI編程

零下一度
零下一度原創
2017-05-19 12:42:424635瀏覽

什麼是CGI

CGI 目前由NCSA維護,NCSA定義CGI如下:

CGI(Common Gateway Interface),通用網關介面,它是一段程式,運行在伺服器上如:HTTP伺服器,提供同客戶端HTML頁面的介面。

網頁瀏覽

為了更好的了解CGI是如何運作的,我們可以從在網頁上點擊一個連結或URL的流程:

1、使用你的瀏覽器存取URL並連接到HTTP web 伺服器。

2、網路伺服器接收到請求資訊後會解析URL,並尋找存取的檔案在伺服器上是否存在,如果存在傳回檔案的內容,否則會傳回錯誤訊息。

3、瀏覽器從伺服器上接收訊息,並顯示接收的檔案或錯誤訊息。

CGI程式可以是Python腳本,PERL腳本,SHELL腳本,C或C++程式等。

CGI架構圖

什麼是CGI?詳細介紹Python CGI編程

Web伺服器支援及設定

在你進行CGI程式設計前,確保您的網路伺服器支援CGI及已經配置了CGI的處理程序。

Apache 支援CGI 設定:

設定好CGI目錄:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/

所有的HTTP伺服器執行CGI程式都儲存在一個預先設定好的目錄。這個目錄被稱為CGI目錄,並且按照慣例,它被命名為/var/www/cgi-bin目錄。

CGI檔案的副檔名為.cgi,python也可以使用.py副檔名。

預設情況下,Linux伺服器配置運行的cgi-bin目錄中為/var/www。

如果你想指定其他運行CGI腳本的目錄,可以修改httpd.conf配置文件,如下所示:

<Directory "/var/www/cgi-bin">
   AllowOverride None
   Options +ExecCGI
   Order allow,deny
   Allow from all</Directory>

在AddHandler 中添加.py 後綴,這樣我們就可以訪問. py 結尾的python 腳本檔:

AddHandler cgi-script .cgi .pl .py

第一個CGI程式

我們使用Python建立第一個CGI程序,檔案名稱為hello.py,檔案位於/var/www/cgi -bin目錄中,內容如下:

#!/usr/bin/python# -*- coding: UTF-8 -*-print "Content-type:text/html"print                               # 空行,告诉服务器结束头部print &#39;<html>&#39;print &#39;<head>&#39;print &#39;<meta charset="utf-8">&#39;print &#39;<title>Hello Word - 我的第一个 CGI 程序!</title>&#39;print &#39;</head>&#39;print &#39;<body>&#39;print &#39;<h2>Hello Word! 我是来自菜鸟教程的第一CGI程序</h2>&#39;print &#39;</body>&#39;print &#39;</html>&#39;

檔案儲存後修改hello.py,修改檔案權限為755:

chmod 755 hello.py

什麼是CGI?詳細介紹Python CGI編程

這個的hello.py腳本是一個簡單的Python腳本,腳本第一行的輸出內容"Content-type:text/html"傳送到瀏覽器並告知瀏覽器顯示的內容類型為"text/html"。

用 print 輸出一個空白行用來告訴伺服器結束頭部資訊。

HTTP頭

hello.py檔案內容中的" Content-type:text/html"即為HTTP頭部的一部分,它會傳送給瀏覽器告訴瀏覽器檔案的內容類型。

HTTP頭的格式如下:

HTTP 字段名: 字段内容

例如:

Content-type: text/html

以下是一個簡單的CGI腳本輸出CGI的環境變數:

#!/usr/bin/python# -*- coding: UTF-8 -*-# filename:test.pyimport osprint "Content-type: text/html"printprint "<meta charset=\"utf-8\">"print "<b>环境变量</b><br>";print "<ul>"for key in os.environ.keys():    print "<li><span style=&#39;color:green&#39;>%30s </span> : %s </li>" % (key,os.environ[key])print "</ul>"

GET和POST方法

瀏覽器客戶端透過兩種方法向伺服器傳遞訊息,這兩種方法就是GET 方法和POST 方法。

使用GET方法传输数据

GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面的URL上,以"?"号分割, 如下所示:

www.test.com/cgi-bin/hello.py?key1=value1&key2=value2


有关 GET 请求的其他一些注释:

GET 请求可被缓存

GET 请求保留在浏览器历史记录中

GET 请求可被收藏为书签

GET 请求不应在处理敏感数据时使用

GET 请求有长度限制

GET 请求只应当用于取回数据

简单的url实例:GET方法

以下是一个简单的URL,使用GET方法向hello_get.py程序发送两个参数:

/cgi-bin/test.py?name=菜鸟教程&url=www.runoob.com

以下为hello_get.py文件的代码:

#!/usr/bin/python# -*- coding: UTF-8 -*-# filename:test.py# CGI处理模块import cgi, cgitb 
# 创建 FieldStorage 的实例化form = cgi.FieldStorage() 
# 获取数据site_name = form.getvalue(&#39;name&#39;)site_url  = form.getvalue(&#39;url&#39;)print "Content-type:text/html"printprint "<html>"print "<head>"print "<meta charset=\"utf-8\">"print "<title>菜鸟教程 CGI 测试实例</title>"print "</head>"print "<body>"print "<h2>%s官网:%s</h2>" % (site_name, site_url)print "</body>"print "</html>"

文件保存后修改 hello_get.py,修改文件权限为 755:

chmod 755 hello_get.py

简单的表单实例:GET方法

以下是一个通过HTML的表单使用GET方法向服务器发送两个数据,提交的服务器脚本同样是hello_get.py文件,hello_get.html 代码如下:

<!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body>
<form action="/cgi-bin/hello_get.py" method="get">站点名称: <input type="text" name="name">  <br />
站点 URL: <input type="text" name="url" /><input type="submit" value="提交" /></form></body></html>

【相关推荐】

1. 详解cgi向文本或者数据库写入数据实例代码

2. 分享在IIS上用CGI方式运行Python脚本的实例教程

3. 使用CGI模块建立简单web页面教程实例

4. 分享一个PythonCGI编程的实例教程

5. 详解XML与现代CGI应用程序的示例代码

6. FastCGI 进程意外退出造成500错误

以上是什麼是CGI?詳細介紹Python CGI編程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn