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

使用Python的HTTPServer()模块快速搭建Web服务器

发布时间:2024-01-02 05:51:33

使用Python的HTTPServer模块可以快速搭建一个简单的Web服务器。下面是一个使用例子,包括搭建Web服务器、处理GET和POST请求、路由和静态文件服务。

首先,我们需要导入模块:

import http.server
import socketserver

接下来,定义一个处理请求的类,继承自http.server.BaseHTTPRequestHandler类,并重写其中的do_GET和do_POST方法。在这些方法中,我们可以根据需要处理请求,发送响应。

class SimpleHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(b'Hello, World!')
        else:
            self.send_response(404)
            self.end_headers()
    
    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        # 处理POST数据
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'POST request received')

然后,创建一个HTTP服务器,并设置请求处理器为我们定义的SimpleHTTPRequestHandler类。我们可以指定服务器的地址和端口。

Handler = SimpleHTTPRequestHandler

with socketserver.TCPServer(('localhost', 8000), Handler) as httpd:
    print('Server started on localhost:8000...')
    httpd.serve_forever()

整个服务器的代码如下:

import http.server
import socketserver

class SimpleHTTPRequestHandler(http.server.BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/':
            self.send_response(200)
            self.send_header('Content-type', 'text/html')
            self.end_headers()
            self.wfile.write(b'Hello, World!')
        else:
            self.send_response(404)
            self.end_headers()
    
    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        # 处理POST数据
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'POST request received')

Handler = SimpleHTTPRequestHandler

with socketserver.TCPServer(('localhost', 8000), Handler) as httpd:
    print('Server started on localhost:8000...')
    httpd.serve_forever()

保存为一个.py文件,运行即可启动一个简单的Web服务器。当访问http://localhost:8000时,会返回"Hello, World!"。其他路径都会返回404错误。

你还可以根据需要在do_GET和do_POST方法中添加路由功能,根据不同的路径返回不同的响应。同时,你也可以使用静态文件服务功能,在服务器上提供静态文件。

例如,我们可以在do_GET方法中添加对静态文件的支持:

def do_GET(self):
    if self.path == '/':
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(b'Hello, World!')
    elif self.path.endswith('.html'):
        try:
            with open(self.path[1:], 'rb') as file:
                self.send_response(200)
                self.send_header('Content-type', 'text/html')
                self.end_headers()
                self.wfile.write(file.read())
        except FileNotFoundError:
            self.send_response(404)
            self.end_headers()
    else:
        self.send_response(404)
        self.end_headers()

这样,当访问http://localhost:8000/index.html时,会返回index.html的内容。如果文件不存在,会返回404错误。

以上就是使用Python的HTTPServer模块快速搭建Web服务器的示例。你可以根据需要扩展这个例子,以构建更复杂的Web应用程序。