python核心编程学习笔记-2016-09-15-02-Web编程(八)

        20.8 Web(HTTP)服务器

        建立一个Web服务,需要一个基本的服务器和一个处理器。

        服务器的角色是在客户端和服务器端完成必要的HTTP交互,在python的BaseHTTPServer模块中找到HTTPServer的服务器基本类。

        处理器是处理客户端的请求,并返回适当的文件,如静态的文本或由CGI生成的动态文件。在python标准库中,提供了三种不同的处理器。分别是BaseHTTPRequestHander、SimpleHTTPRequestHandle和CGIHTTPRequestHandler。

        BaseHTTPRequestHandler在BaseHTTPServer模块中,它是最基本最普通的处理器,除了获取客户端的请求外,不执行其他处理工作,必须要自己完成。

        SimpleHTTPRequestHandler在SimpleHTTPServer模块中,它基于BaseHTTPRequestHandler,可直接执行标准的GET和HEAD请求。

        CGIHTTPRequestHandler在CGIHTTPServer模块中,基于SimpleHTTPRequestHandler,并为POST请求提供支持,也可调用CGI脚本完成请求过程,也可以将生成的HTML脚本返回给客户端。

         书中的例20.9:

#-*-coding: utf-8-*-

from os import curdir, sep
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer

class MyHandler(BaseHTTPRequestHandler):
    
    def do_GET(self):
        try:
            f = open(self.path[1:], 'r') # 参考第三版的python核心编程,尝试打开客户端传来的路径(即http://localhost:80/XXX中的XXX)。
            self.send_response(200) # 成功之后返回"OK"状态(200),并转发下载的web页面
            self.send_header('Content-type', 'text/html') # 头文件?
            self.end_headers()
            self.wfile.write(f.read()) # ?
            f.close()
        except IOError:
            self.send_error(404, 'File Not Found: %s' % self.path) # 没有成功,就返回404状态

def main():
    try:
        server = HTTPServer(('', 80), MyHandler) # 确定主机名为localhost,端口为80,要确保80端口不被非python程序占用,否则就会返回[Errno 10013]
        print 'Welcome to the machine...'
        print 'Press ^C once or twice to quit.'
        server.serve_forever() # 服务器/客户端无限循环
    except KeyboardInterrupt:
        print '^C received, shutting down server'
        server.socket.close() # 如果在终端人为输入^C,就终止服务器运行。

if __name__ == '__main__':
    main()
        在运行这个脚本时,要注意80端口不能让非python程序占用,否则就会返回[Errno 10013](本人之前就是被这个错误一直折腾)。按照在终端如powershell中正常程序运行,之后再在浏览器中输入http://localhost:80/XXX(XXX是要打开文件的路径)。

   

    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值