什么是CGI
CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口。
如何运行一段CGI的python3脚本呢?
注意:不能直接和其他python脚本一样运行,应该是放到一个服务器上进行运行,pyhton3支持在本地运行这样的脚本
1.启动python3模块中的cgi服务器,并指定端口
在控制台运行python3 -m http.server --cgi 9123
,9123指的是开启的监听端口,不要关闭这个控制台窗口
2.查看端口是否成功开启,打开某个浏览器中然后输入url(localhost:9123)
这个这是部分截图哈,反正就是电脑中的某个目录文件夹
3.找到这个文件夹,一般来说这个文件夹是当前用户目录,然后在这个目录里新建一个python文件,这时候就可以开始cgi编程了
将以下内容为hello.py
# -*- coding: utf-8 -*-
print('Content-Type:text/html \n')
print('')
print('Hello, world!')
然后在浏览器url中输入http://localhost:9123/cgi-bin/hello.py
WHAT ! Error …
怎么出错了?
仔细看下这个错误,这个脚本不可执行!说明这个文件是不允许被执行
所以需要修改这个脚本的权限
如果你是mac,在命令行中执行:sudo chmod 777 /Users/xxx/cgi-bin/hello.py
,xxx是用户名;
如果你是windows,那么你找到这个文件,然后右键,点击属性,然后进行修改
做了以上修改,那么在一次在浏览器输入url:http://localhost:9123/cgi-bin/hello.py
脚本第一行的输出内容”Content-type:text/html”发送到浏览器并告知浏览器显示的内容类型为”text/html”。
用 print 输出一个空行用于告诉服务器结束头部信息。
cgi处理html请求
以下内容仅仅是一个入门级,如果需要深入了解,需要读者查找相关资料继续学习
编写一个html页面,主要包含了一个输入框、一个按钮,当按下按钮便提交请求
一个对应的python脚本进行处理这个请求,如果这个输入框中未输入指,则页面显示一个‘How are you ?‘,如果输入了值,则页面显示‘Hello,xxx‘。
文件cgi.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>CGI Page</title>
</head>
<body>
<form method="post" action="http://localhost:9123/cgi-bin/abc.py">
<p>
<b>Enter you name:</b>
</p>
<p>
<input type="text" name="user">
</p>
<p>
<input type="submit" name="submit">
</p>
</form>
</body>
</html>
文件abc.py
# -*- coding: utf-8 -*-
import cgi
print('Content-Type:text/html \n')
print('')
print('Hello, world!')
form = cgi.FieldStorage()
print('<title>Reply Page</title>')
if 'user' not in form:
print('<h1>Who are you?</h1>')
else:
print('<h1>Hello <i>%s<i>!</h1>' % form['user'].value)
注意修改abc.py的权限
测试:
1.以浏览器的打开方式打开cgi.html
2.直接点击按钮
3.回退以下,输入,在点击按钮
未输入
输入
这篇博客的由来
昨天晚上,一个学弟来问了我关于cgi的问题,我之前其实也没有接触过这一方面,所以我便去查相关的资料
很快,我把cgi的环境搭好了,然后直接运行学弟发过来的cgi脚本,不知道为啥一直报错,什么错呢?
格式错误 !!!
这是啥玩意啊!经过一段时间的资料查询,竟然发现这问题是由于系统的不一引起的,我用的macOS,而学弟是windows
想想你可能觉得这个会有存在编码问题吗?你打开文件确实没什么变化,但是呢,这里面的内容确实改变了,详细信息查看这一博客,这个真是大佬,这也行啊!!!
欢迎大家留言转载
关注微信公众号:SimFG,随时随地看博客要点