最近学习到Python的cgi编程,捣鼓了一番,把自己的学习经验放出来。
你需要去官网下载。
地址:https://www.apachehaus.com/cgi-bin/download.plx或者http://www.apachelounge.com/download/。这两个地址一般情况下都是可以的。如果第一个地址下载提示 403 Forbidden,那就换第二个地址一般没什么问题的。
下载ok后解压,我的安装解压目录是D:\Program Files\ApacheHttpdServer (目录随意请不要使用中文),使用cmd切换到Apache的bin目录下,使用httpd -k install安装服务。如果成功便会提示installed,如图:
当然一般刚下载的文件是无法安装成功的。因为我们需要修改httpd.conf文件。
进入D:\Program Files\ApacheHttpdServer\Apache24\conf文件夹下,找到httpd.conf使用好一点的文本编辑器打开。凡是#开头的都是注释,所以请要么删除,要么无视。
我们需要修改几个关键的元素。
1.ServerRoot,这个必须是正确的目录,它是Apache2.4的主目录。Listen 指示服务器的端口号,默认80,如果你的程序会占用那就修改掉好了。我的修改方案如下:
ServerRoot "D:/Program Files/ApacheHttpdServer/Apache24"
Listen 80
2.DocumentRoot,这个必须是正确的文件夹目录,末尾不能带/。这个目录用来存放静态资源页面,我们要访问的html文件就放在这下面。我的修改方案如下:
DocumentRoot "D:/Program Files/ApacheHttpdServer/Apache24/htdocs"
3.
ScriptAlias /cgi-bin/ "D:/Program Files/ApacheHttpdServer/Apache24/cgi-bin/"
4.Directory标签元素,约定脚本文件的访问目录和权限,这个也很重要,一定要修改。我的修改方案如下:
AllowOverride None
Options +ExecCGI
Order allow,deny
Allow from all
Require all granted
注意,是Require all granted而非Require all denied,错误使用后者将可能导致访问被拒绝。且Directory的目录和ScriptAlias的目录一致。
5.
TypesConfig conf/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddHandler cgi-script .cgi .py
其他没有提到的都可以无视掉。温馨提示,所有修改动作都是在conf文件已有的元素上进行的覆盖操作,你需要找到需要修改的元素然后覆盖。请不要直接将我的方案copy后追加到conf文件后面。
好了,如果第一步服务未安装成功,请再次尝试使用httpd -k install安装服务。然后打开ApacheMonitor.exe点击start就ok了,如果start仍然失败请依次检查我提到的5点看是否修改正确。
如果ok你将看到下图,它是绿色的。
此时浏览器直接输入localhost,将看到It works。代表服务启动ok
我的代码hello.py如下:
#!D:\Programs\Python\Python36\python.exe
#-*- coding:UTF-8 -*-
print ("Content-type:text/html")
print ()
print ('')
print ('')
print ('')
print ('Hello Word - 我的第一个 CGI 程序! ')
print ('')
print ('')
print ('Hello Word! 我是来自菜鸟教程的第一CGI程序
')
print ('')
print ('')
注意前两段的两个#号可不是注释哦,第一段#指令用来指定使用哪个python解释器来运行脚本(如果你还没有安装python那肯定跑不了的哦)。第二段指定脚本的输出编码。
我的test.html文件代码如下:
Hello Word - 我的第一个 CGI 程序!
Hello Word! 我是来自菜鸟教程的第一CGI程序
然后将hello.py丢进cgi-bin目录,将test.html丢进htdocs目录。如下
然后分别输入http://localhost/cgi-bin/hello.py 和 http://localhost/test.html将访问成功
完结,谢谢观看。