一 、CGI 编程之前缀篇
CGI 目前由NCSA维护,NCSA定义CGI如下:
CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口。
网页浏览
为了更好的了解CGI是如何工作的,我们可以从在网页上点击一个链接或URL的流程:
1、使用你的浏览器访问URL并连接到HTTP web 服务器。
2、Web服务器接收到请求信息后会解析URL,并查找访问的文件在服务器上是否存在,如果存在返回文件的内容,否则返回错误信息。
3、浏览器从服务器上接收信息,并显示接收的文件或者错误信息。
CGI程序可以是Python脚本,PERL脚本,SHELL脚本,C或者C++程序等。
第一个CGI程序
我们使用Python创建第一个CGI程序,文件名为hello.py,文件位于/var/www/cgi-bin目录中,内容如下:
print ("Content-type:text/html")
print () # 空行,告诉服务器结束头部
print ('')
print ('')
print ('
')
print ('
Hello Word - 我的第一个 CGI 程序!
')
print ('')
print ('')
print ('
Hello Word! 我是来自菜鸟教程的第一CGI程序
')
print ('')
print ('')
简单的url实例:GET方法
以下是一个简单的URL,使用GET方法向hello_get.py程序发送两个参数:
import codecs ,sys
sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)
#CGI处理模块
import cgi, cgitb
#创建 FieldStorage 的实例化
form = cgi.FieldStorage()
#获取数据
site_name = form.getvalue('name')
site_url = form.getvalue('url')
print ("Content-type:text/html")
print ()
print ("")
print ("")
print ("
")
print ("
The site of Mr.chen
")
print ("")
print ("
")
print ("
")
print ("")
print ("")
print ("
%s官网:%s
" % (site_name, site_url))
print ("")
print ("")
GET和POST方法
浏览器客户端通过两种方法向服务器传递信息,这两种方法就是 GET 方法和 POST 方法。
使用GET方法传输数据
GET方法发送编码后的用户信息到服务端,数据信息包含在请求页面的URL上,以"?"号分割, 如下所示:
http://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=http://www.runoob.com
#!/usr/bin/python3
CGI处理模块
import cgi, cgitb
#创建 FieldStorage 的实例化
form = cgi.FieldStorage()
#获取数据
site_name = form.getvalue('name')
site_url = form.getvalue('url')
print ("Content-type:text/html")
print ()
print ("")
print ("")
print ("
")
print ("
菜鸟教程 CGI 测试实例
")
print ("")
print ("")
print ("
%s官网:%s
" % (site_name, site_url))
print ("")
print ("")
使用POST方法传递数据
使用POST方法向服务器传递数据是更安全可靠的,像一些敏感信息如用户密码等需要使用POST传输数据。
以下同样是hello_get.py ,它也可以处理浏览器提交的POST表单数据:
#!/usr/bin/python3
#CGI处理模块
import cgi, cgitb
#创建 FieldStorage 的实例化
form = cgi.FieldStorage()
#获取数据
site_name = form.getvalue('name')
site_url = form.getvalue('url')
print ("Content-type:text/html")
print ()
print ("")
print ("")
print ("
")
print ("
菜鸟教程 CGI 测试实例
")
print ("")
print ("")
print ("
%s官网:%s
" % (site_name, site_url))
print ("")
print ("")
以下为表单通过POST方法(method=“post”)向服务器脚本 hello_get.py 提交数据:
下为表单通过POST方法(method=“post”)向服务器脚本 hello_get.py 提交数据:
菜鸟教程(runoob.com)
https://www.runoob.com/python3/python3-cgi-programming.html