1. 使用http.server
模块搭建简单HTTP服务器
代码示例
import http.server
import socketserver
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd:
print("Serving at port", PORT)
httpd.serve_forever()
解释
- 导入模块:首先,我们导入了
http.server
和socketserver
模块。http.server
模块提供了HTTP服务器相关的类和函数,而socketserver
模块则提供了更底层的套接字服务器功能。 - 定义端口:我们设置了一个常量
PORT
,用于指定HTTP服务器监听的端口号(在这个例子中是8000)。 - 指定处理器:我们使用
http.server.SimpleHTTPRequestHandler
作为HTTP请求的处理程序。这个类已经实现了基本的HTTP请求处理逻辑,包括GET、HEAD等请求方法。 - 创建服务器:我们使用
socketserver.TCPServer
类创建一个TCP服务器实例。这个类的第一个参数是一个元组,表示服务器的地址和端口号(在这个例子中,我们使用空字符串表示监听所有可用的网络接口)。第二个参数是请求处理程序类,即我们之前指定的Handler
。 - 启动服务器:我们使用
with
语句来创建并启动服务器。这样,当with
语句块结束时,服务器会自动关闭。在with
语句块内部,我们调用httpd.serve_forever()
方法来启动服务器,使其持续监听并处理请求。
2. 扩展BaseHTTPRequestHandler
创建自定义HTTP服务器
虽然直接使用http.server.SimpleHTTPRequestHandler
可以很方便地搭建一个简单的HTTP服务器,但如果你需要实现更复杂的逻辑或自定义的HTTP请求处理方法,你可能需要扩展BaseHTTPRequestHandler
类。
代码示例
import http.server
from http.server import BaseHTTPRequestHandler, HTTPServer
class CustomHTTPRequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
# 发送响应头
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
# 发送响应体
message = "<html><body><h1>Hello, World!</h1></body></html>"
self.wfile.write(message.encode('utf-8'))
return
def run_server():
server_address = ('', 8000)
httpd = HTTPServer(server_address, CustomHTTPRequestHandler)
print('Starting up server on port 8000...')
httpd.serve_forever()
if __name__ == '__main__':
run_server()
解释
- 导入模块和类:除了导入
http.server
模块外,我们还从http.server
模块中导入了BaseHTTPRequestHandler
和HTTPServer
类。 - 定义自定义请求处理程序:我们创建了一个名为
CustomHTTPRequestHandler
的类,它继承自BaseHTTPRequestHandler
。在这个类中,我们重写了do_GET
方法,用于处理GET请求。在do_GET
方法中,我们首先发送响应头(包括状态码和内容类型),然后发送响应体(一个包含HTML内容的字符串)。注意,在发送响应体之前,我们需要将字符串编码为字节流(在这个例子中,我们使用UTF-8编码)。 - 创建并启动服务器:在
run_server
函数中,我们指定了服务器的地址和端口号(与之前的示例相同),并创建了一个HTTPServer
实例。这个实例使用我们自定义的CustomHTTPRequestHandler
类作为请求处理程序。然后,我们调用httpd.serve_forever()
方法来启动服务器。 - 主程序入口:在脚本的最后部分,我们检查是否作为主程序运行(而不是被导入为模块)。如果是主程序运行,则调用
run_server
函数来启动服务器。
3. 深入解释(扩展部分)
由于直接要求300
处理结果:
1. 使用http.server
模块搭建简单HTTP服务器
代码示例
```python
PORT = 8000
Handler = http.server.SimpleHTTPRequestHandler
with socketserver.TCPServer(("", PORT), Handler) as httpd_
print("Serving at port", PORT)
httpd.serve_forever()
- 导入模块:首先,我们导入了
http.server
和socketserver
模块。http.server
模块提供了HTTP服务器相关的类和函数,而socketserver
模块则提供了更底层的套接字服务器功能。2. 扩展
虽然直接使用BaseHTTPRequestHandler
创建自定义HTTP服务器http.server.SimpleHTTPRequestHandler
可以很方便地搭建一个简单的HTTP服务器,但如果你需要实现更复杂的逻辑或自定义的HTTP请求处理方法,你可能需要扩展BaseHTTPRequestHandler
类。代码示例
```python
class CustomHTTPRequestHandler(BaseHTTPRequestHandler)_
def doGET(self)发送响应头
self.send_response(200)
self.send_header('Content-type', 'text_html')
self.end_headers()发送响应体
message = "
Hello, World!<_h1><_body><_html>"
self.wfile.write(message.encode('utf-8'))
return
def runserver()
server_address = ('', 8000)
httpd = HTTPServer(server_address, CustomHTTPRequestHandler)
print('Starting up server on port 8000...')
httpd.serveforever()
if name == 'main'
run_server()
http.server
模块外,我们还从http.server
模块中导入了BaseHTTPRequestHandler
和HTTPServer
类。