本文主要是用Python3的http.server实现一个简易的Web服务器,具体的参考可在此查看。
该简易Web服务器可以处理GET以及POST请求,具体的代码实现如下所示。
from http.server import BaseHTTPRequestHandler, HTTPServer ### 导入必要的模块和依赖
from os import path, system, environ
from urllib.parse import urlparse
import cgi
import time
class server_handler(BaseHTTPRequestHandler):
def do_GET(self):
mimetype = 'text/html'
page_file = open("/path/to/test.html", 'rb')
self.send_response(200)
self.send_header('Content-type', mimetype)
self.end_headers()
self.wfile.write(page_file.read())
def do_POST(self):
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={
'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],
}
)
print(form['login_user'].value)
print(form['login_passwd'.value])
self.send_response(200)
self.send_header('Content-type', mimetype)
self.end_headers()
self.wfile.write("Success")
def run():
port = 8080
print("Starting server, port ", port)
### Server settings
server_address = ('', port)
httpd = HTTPServer(server_address, server_handler)
print("Server is running ...")
httpd.serve_forever()
if __name__ == '__main__':
run()
首先,通过继承BaseHTTPRequestHandler,来获取Python Http server内的所有有关用户请求处理的代码,方便后面我们复写自己的用户请求处理。
接下来的do_GET
和do_POST
两个函数分别用于处理用户的GET请求和POST请求。在do_POST
内,通过cgi包的FieldStorage类,我们可以访问POST请求内的form表单内容,用于我们后面的进一步处理。而代码块
self.send_response(200)
self.send_header('Content-type', mimetype)
self.end_headers()
self.wfile.write("Success")
用于通知前端页面,请求的反馈状态,并返回对应的网页内容。
最后,通过run
函数,来启动此简易Web服务器,并持续监听8080端口的请求信息。
以上就是利用Python http模块实现的简易Web服务器,非常简单,分别实现两个成员函数来监听对应的GET请求和POST请求,然后返回给前段页面对应内容即可,仅此而已。服务器的启动需要借由终端实现,下面的启动命令以Linux为例。
$ cd /path/to/your_server_file_position
$ python3 SimpleWebServer.py
其中SimpleWebServer.py为简易服务器的文件的名。
哦,对了,我们还少了一个前段页面的内容,以下是前端页面的代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<div id="login" >
<form method="post">
<div>
<label for="loginUser" class="sr-only">Username</label>
<input id="loginUser" type="text" autofocus placeholder="Username" name="login_user"></input>
<label for="loginPasswd" class="sr-only">Password</label>
<input id="loginPasswd" type="password" placeholder="Password" name="login_passwd"></input>
</div>
<button type="submit">Login</button>
</form>
</div>
</body>
</html>
上述HTML代码保存为test.html文件,该文件即通过do_GET
函数返回给前端页面。通过浏览器访问localhost:8080,即可看到该文件的内容。
Enjoy it。