Python下CGIweb服务器实现(CGIHTTPServer) 《Head First Python》第七章

《Head First Python》第260页中介绍的支持CGI的web服务器的编写适合python3,不巧我的是Python2,亲测不行,类库并不一致!原因是:

在Python 3.x中,BaseHTTPServer, SimpleHTTPServer, CGIHTTPServer整合到http.server包,SocketServer改名为socketserver,请注意查阅官方文档

1.CGIHTTPServer的功能作用

CGIHTTPServer功能

CGIHTTPServer包中的CGIHTTPRequestHandler类继承自SimpleHTTPRequestHandler类,所以可以用来代替上面的例子,来提供静态文件的服务。此外,CGIHTTPRequestHandler类还可以用来运行CGI脚本。

先看看什么是CGI (Common Gateway Interface)。

CGI是服务器和应用脚本之间的一套接口标准。它的功能是让服务器程序运行脚本程序,将程序的输出作为response发送给客户。总体的效果,是允许服务器动态的生成回复内容,而不必局限于静态文件。

运行原理:

支持CGI的服务器程接收到客户的请求,根据请求中的URL,运行对应的脚本文件。服务器会将HTTP请求的信息和socket信息传递给脚本文件,并等待脚本的输出。脚本的输出封装成合法的HTTP回复,发送给客户。CGI可以充分发挥服务器的可编程性,让服务器变得“更聪明”。

服务器和CGI脚本之间的通信要符合CGI标准。CGI的实现方式有很多,比如说使用Apache服务器与Perl写的CGI脚本,或者Python服务器与shell写的CGI脚本。

2.代码实现

2.1Python3 CGIweb服务器

from http.server import HTTPServer, CGIHTTPRequestHandler
last 
port = 8000

httpd = HTTPServer(('', port), CGIHTTPRequestHandler)
print("Starting simple_httpd on port: " + str(httpd.server_port))
httpd.serve_forever()

2.2 Python2 CGIweb服务器

import BaseHTTPServer
import CGIHTTPServer

Host = ''
port = 8000

#create the server, CGIHTTPRequestHandler is pre-defined 
handler

server = BaseHTTPServer.HTTPServer((Host,port),CGIHTTPServer.CGIHTTPRequestHandler)

#Start the server

server.serve_forever()

3 服务器调试

一定要先切换到服务器所在目录下,再运行服务器程序!!否则会出错!

如下图:

错误路径

正确的做法:

正确路径

4 总结

一定要注意执行服务器程序的路径问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值