BaseHTTPRequestHandler介绍

这是一个以TCPServer为基础开发的模块,可以在请求外层添加http协议报文,发送http协议。

基于BaseHTTPServer 的Http Server的处理流程:
1.HTTPServer绑定对应的应答类(BaseHTTPRequestHandler )
http_server = HTTPServer((’’, int(port)), ServerHTTP)
2.监听端口:
http_server.serve_forever()
serve_forever()方法使用select.select()循环监听请求,当接收到请求后调用
当监听到请求时,取出请求对象
3.应答:
创建新线程以连接对象(开始理解成请求对象)为参数实例化应答类:ServerHTTP()
应答类根据请求方式调用ServerHTTP.do_XXX处理方法

常用方法/属性:
BaseHTTPRequestHandler.path #包含的请求路径和GET请求的数据
BaseHTTPRequestHandler.command #请求类型GET、POST…
BaseHTTPRequestHandler.request_version #请求的协议类型HTTP/1.0、HTTP/1.1
BaseHTTPRequestHandler.headers #请求的头
BaseHTTPRequestHandler.responses #HTTP错误代码及对应错误信息的字典
BaseHTTPRequestHandler.handle() #用于处理某一连接对象的请求,调用handle_one_request方法处理
BaseHTTPRequestHandler.handle_one_request() #根据请求类型调用do_XXX()方法,XXX为请求类型
BaseHTTPRequestHandler.do_XXX() #处理请求
BaseHTTPRequestHandler.send_error() #发送并记录一个完整的错误回复到客户端,内部调用send_response()方法实现
BaseHTTPRequestHandler.send_response() #发送一个响应头并记录已接收的请求
BaseHTTPRequestHandler.send_header() #发送一个指定的HTTP头到输出流。 keyword 应该指定头关键字,value 指定它的值
BaseHTTPRequestHandler.end_headers() #发送一个空白行,标识发送HTTP头部结束
BaseHTTPRequestHandler.wfile #self.connection.makefile(‘rb’, self.wbufsize) self.wbufsize = -1 应答的HTTP文本流对象,可写入应答信息
BaseHTTPRequestHandler.rfile #self.connection.makefile(‘wb’, self.rbufsize) self.rbufsize = 0 请求的HTTP文本流对象,可读取请求信息

# coding:utf-8
try:
    #python2 
    from  BaseHTTPServer import HTTPServer,BaseHTTPRequestHandler
except:
    #python3
     from http.server import BaseHTTPRequestHandler, HTTPServer

class CustomHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        path = self.path
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        # 根据路径返回不同的内容
        if self.path == '/':
            self.wfile.write(b'Hello, welcome to our custom server!')
        elif self.path == '/hello':
            self.wfile.write(b'Hello world!')
        else:
            self.wfile.write(b'Not Found')

def start_server(port):
    http_server = HTTPServer(('', int(port)), CustomHandler)
    http_server.serve_forever() 
    
if __name__ == "__main__":
    start_server(8000)

  

 posted on 2024-04-15 11:33  boye169  阅读(9)  评论(0编辑  收藏  举报