- 等待某个人连接我们的服务器并向我们发送一个HTTP请求
- 解析该请求
- 了解该请求希望请求的内容
- 服务器根据请求抓取需要的数据(从服务器本地文件中读取或者程序动态生成)
- 将数据格式化为请求需要的格式
- 返回HTTP响应
步骤1、2、6的操作对所有web应用都是一样的,这部分内容Python标准库中的 BaseHTTPServer
模块可以帮助我们处理。我们只需要关注步骤3~5。
#-*- coding:utf-8 -*-
from http.server import BaseHTTPRequestHandler, HTTPServer
class RequestHandler(BaseHTTPRequestHandler):
'''处理请求并返回页面'''
# 页面模板
Page = '''\
<html>
<body>
<p>Hello, web!</p>
</body>
</html>
'''
# 处理一个GET请求
def do_GET(self):
self.send_response(200)
self.send_header("Content-Type", "text/html")
self.send_header("Content-Length", str(len(self.Page)))
self.end_headers()
self.wfile.write(self.Page.encode('utf-8'))
if __name__ == '__main__':
serverAddress = ('', 8080)
server = HTTPServer(serverAddress, RequestHandler)
server.serve_forever()
模块的 BaseHTTPRequestHandler
类会帮我们处理对请求的解析,并通过确定请求的方法来调用其对应的函数,比如方法是 GET
,该类就会调用名为 do_GET
的方法。RequestHandler
继承了 BaseHTTPRequestHandler
并重写了 do_GET
方法,其效果如代码所示是返回 Page
的内容。 Content-Type
告诉了客户端要以处理html文件的方式处理返回的内容。end_headers
方法会插入一个空白行,如之前的request结构图所示。
运行我们的第一个 web服务器: