欢迎访问宙启技术站
智能推送

Python中的http.server.BaseHTTPRequestHandler介绍与示例

发布时间:2024-01-04 17:55:04

在Python中,http.server.BaseHTTPRequestHandler是一个处理HTTP请求的基类。它是http.server模块中的一部分,用于创建简单的Web服务器。该类提供了一组方法,用于处理不同类型的HTTP请求。

与其他编程语言相比,Python中的http.server模块提供了一个简单而强大的方式来创建Web服务器,并处理HTTP请求和响应。通过继承BaseHTTPRequestHandler类,我们可以定制自己的请求处理逻辑。

下面是一个示例,演示了如何使用http.server.BaseHTTPRequestHandler创建一个简单的Web服务器,并处理GET和POST请求。

from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs

class MyHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        # 处理GET请求
        if self.path == '/':
            # 设置响应头
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            # 设置响应内容
            response = '<h1>Hello, World!</h1>'
            self.wfile.write(response.encode())
        else:
            self.send_response(404)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            response = '<h1>Page not found</h1>'
            self.wfile.write(response.encode())

    def do_POST(self):
        # 处理POST请求
        if self.path == '/submit':
            # 设置响应头
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            # 解析POST参数
            content_length = int(self.headers['Content-Length'])
            post_data = self.rfile.read(content_length).decode()
            params = parse_qs(post_data)
            # 设置响应内容
            name = params.get('name', [''])[0]
            response = '<h1>Hello, {}!</h1>'.format(name)
            self.wfile.write(response.encode())
        else:
            self.send_response(404)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            response = '<h1>Page not found</h1>'
            self.wfile.write(response.encode())

if __name__ == '__main__':
    # 创建服务器对象
    server_address = ('', 8000)
    httpd = HTTPServer(server_address, MyHandler)
    # 开始监听请求
    print('Server running at http://localhost:8000')
    httpd.serve_forever()

上面的示例中,我们定义了一个自定义的请求处理类MyHandler,它继承自http.server.BaseHTTPRequestHandler。在MyHandler中,我们重写了do_GETdo_POST方法,分别用于处理GET和POST请求。

do_GET方法中,我们判断请求路径是否为根路径/,如果是,返回一个简单的HTML页面,否则返回一个404错误页面。在do_POST方法中,我们判断请求路径是否为/submit,如果是,解析POST参数,并返回一个包含参数的HTML页面,否则返回一个404错误页面。

最后,在if __name__ == '__main__':语句块中,我们创建了一个HTTP服务器对象,并开始监听请求。当访问http://localhost:8000时,服务器会返回一个Hello, World!的页面。当发送一个POST请求到http://localhost:8000/submit,并携带一个名为name的参数时,服务器会返回一个根据参数生成的页面。

通过继承http.server.BaseHTTPRequestHandler类,我们可以根据自己的需求,对HTTP请求进行自定义处理,进行更复杂的Web开发。