一、介绍1.1 输入1.2 输出1.3 例子12.1.4 使用1.5功能 一、介绍官方文档:https://docs.python.org/3/library/cgi.html通用网关接口(CGI)脚本的支持模块,该模块定义了许多实用程序,可供Python编写的CGI脚本使用。HTTP服务器调用CGI脚本,通常用于处理通过HTML或元素提交的用户输入。CGI脚本通常位于cgi-bin目录中。HTTP服务器将有关请求的各种信息(eg:客户端的主机名、请求的URL、查询字符串等内容)放置在脚本的外壳环境中,执行脚本,并将脚本的输出发送给客户。 1.1 输入脚本的输入也连接到客户端,有时通过这种方式读取表单数据。CGI模块将服务器设置的sys.stdin与环境变量当作输入的来源,环境变量如下表所示。 环境变量 说明 AUTH_TYPE 认证方式 CONTENT_LENGTH 在sys.stdin中输入的数据长度 CONTENT_TYPE 查看数据的类型 DOCUMENT_ROOT 文件的根目录 GATEWAY_INTERFACE CGI的版本字符串 HTTP_ACCEPT 可为客户端接收的MIME类型 HTTP_COOKIE Netscape专用的Cookie值 HTTP_FROM 客户端的电子邮件地址 HTTP_REFERER 引用的URL网址 HTTP_USER_AGENT 客户端的浏览器 PATH_INFO 所传递的路径信息 PATH_TRANSLATED 转译过来的PATH_INFO QUERY_STRING 查询字符串 REMOTE_ADDR 客户端的远程IP地址 REMOTE_HOST 客户端的远程主机地址 REMOTE_IDENT 提出请求的客户 REMOTE_USER 授权的用户名称 REQUEST_METHOD 所调用的方法,可以是GET或POST SCRIPT_NAME 脚本程序的名称 SERVER_NAME 服务器端主机名称 SERVER_PORT 服务器端的通信端口号码 SERVER_PROTOCOL 服务器端的通信协议 SERVER_SOFTWARE 服务器端软件的名称与版本 1.2 输出CGI脚本的输出由两个部分组成,并用空白行分割。第一部分包含许多表头,高速客户端要遵循的数据类型第二部分通常是HTML,允许客户端润建显示带有标题、嵌入式图像等格式良好的文本。 1.3 例子 1写入cs.py到cgi-bin目录中 #!C:\Users\lh\AppData\Local\Programs\Python\Python37\python.exe #coding=utf-8 print("Content-Type: text/html") # HTML is followingprint() print("<TITLE>CGI script output</TITLE>")print("<H1>This is my first CGI script</H1>")print("Hello, world!") 打开Apache服务,然后访问http://127.0.0.1:8088/cgi-bin/cs.py 2.CGI脚本输出CGI的环境变量 #!C:\Users\lh\AppData\Local\Programs\Python\Python37\python.exe #coding=utf-8 import osprint("Content-type:text/html")print()print("<meta charset=\"utf-8\" />")print("<b>环境变量</b><br>")print("<ul>")for key in os.environ.keys(): print("<li><span style = 'color:green'>%30s </span>:%s </li>"%(key, os.environ[key]))print("</ul>") 打开Apache服务,然后访问http://127.0.0.1:8088/cgi-bin/cs.py 1.4 使用cgi模块的FieldStorage类可以读物标准输入(POST方法)或查询字符串(GET方法)。要解析HTML表格的内容,需要创建一个FieldStorage类的实例变量,因为消耗标准输入,它只能实例化一次。表单中包含非ASCII字符,需要使用encoding关键字参数为文档定义编码值。通常包含在在HTML文档的HEAD部分的META标记中或 Content-Type标头中。每一个表格字段都被定义成一个MiniFieldStorage类的实例变量。每一个实例变量都是以字典集的类型来存取。字典集的键值(key)是表格的字段名称,字典集的值(value)是表格的字段内容,如果表格字段有多个值,eg:下拉列表框,就会产生MiniFieldStorage实例变量的列表。 1.5功能cgi模块的函数 函数 说明 cgi.parse(fp=None, environ=os.environ, keep_blank_values=False, strict_parsing=False) 从环境变量或file文件中解析查询 cgi.parse_multipart(fp, pdict, encoding=”utf-8”, errors=”replace”) 解析multipart / form-data类型的输入(用于文件上传)参数是输入文件的fp字典是在Content-Type标头中包含其他参数的字典的pdict,以及编码(请求编码)的参数 cgi.parse_header(string) 将MIME标头(例如Content-Type)解析为一个主值和一个参数字典。 cgi.test() 测试CGI脚本 cgi.print_environ() 格式化HTML shell 的环境变量 cgi.print_form(form) 格式化HTML的表单 cgi.print_directory() 格式化HTML目前的文件夹 cgi.print_environ_usage() 测试CGI脚本