• python web编程 创建一个web服务器


    这里就介绍几个底层的用于创建web服务器的模块,其中最为主要的就是BaseHTTPServer,很多框架和web服务器就是在他们的基础上创建的

    基础知识

    要建立一个Web 服务,一个基本的服务器和一个“处理器”
    是必备的。

    基础的(Web)服务器是一个必备的模具。它的角色是在客户端和服务器端完成必要HTTP 交互。
    在BaseHTTPServer 模块中你可以找到一个名叫HTTPServer 的服务器基本类。

    处理器是一些处理主要“Web 服务”的简单软件。它们处理客户端的请求,并返回适当的文件,
    静态的文本或者由CGI 生成的动态文件。处理器的复杂性决定了你的Web 服务器的复杂程度。Python
    标准库提供了三种不同的处理器。

    最基本,最普通的是 vanilla 处理器,被命名 BaseHTTPResquestHandler,这个可以在基本
    Web 服务器的BaseHTTPServer 模块中找到。除了获得客户端的请求外,不再执行其他的处理工作,
    因此你必须自己完成它们,这样就导致了出现了myhttpd.py 服务的出现。
    用于SimpleHTTPServer 模块中的SimpleHTTPRequestHandler , 建立在
    BaseHTTPResquestHandler 基础上,直接执行标准的GET 和HEAD 请求。这虽然还不算完美,但已经
    可以完成一些简单的功能啦。
    最后,我们来看下用于CGIHTTPServer 模块中的CGIHTTPRequestHandler 处理器,它可以获取
    SimpleHTTPRequestHandler 并为POST 请求提供支持。它可以调用CGI 脚本完成请求处理过程,也可
    以将生成的HTML 脚本返回给客户端。

    BaseHTTPServer 提供基本的Web 服务和处理器类, 分别是HTTPServer 和
    BaseHTTPRequestHandler
    SimpleHTTPServer 包含执行GET 和HEAD 请求的SimpleHTTPRequestHandler 类
    CGIHTTPServer 包含处理POST 请求和执行CGICGIHTTPRequestHandler 类

    实现

    #!/usr/bin/env python
    
    from os import curdir, sep
    from BaseHTTPServer import 
        BaseHTTPRequestHandler, HTTPServer
    
    class MyHandler(BaseHTTPRequestHandler):
    
        def do_GET(self):
            try:
                f = open(curdir + sep + self.path)
                self.send_response(200)
                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)
    
    def main():
        try:
            server = HTTPServer(('', 80), MyHandler)
            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()
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    【转】大内高手—内存管理器
    [转]内存泄漏测试小工具 LeakDiag
    [转]内存泄漏测试小工具 LeakDiag
    (转)SplitContainer 控件(Windows 窗体)
    (转)c++内存分配优先使用内存池,而不是new,delete
    (转)C++内存池
    LeakDiag 使用注意
    Struts Validator验证器使用指南
    oracle JOB样例
    oralce杀session
  • 原文地址:https://www.cnblogs.com/wybert/p/4077631.html
Copyright © 2020-2023  润新知