通过socket实现web请求
import socket
def main():
server = socket.socket()
server.bind((("127.0.0.1", 8080)))
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
server.listen(5)
while True:
conn, (ip, port) = server.accept()
data = conn.recv(1024)
# 转字符串
req = data.decode("utf-8")
data = req.split(" ")
method = data[0]
path = data[1]
conn.send(b"HTTP/1.1 OK\r\n\r\n")
if path == "/":
conn.send(b"hello world")
elif path == "/index":
conn.send(b'This is a index html')
else:
conn.send(b"not found")
conn.close()
if __name__ == '__main__':
main()
WSGI
from wsgiref.simple_server import make_server
def run(env, response):
path = env.get("PATH_INFO")
response("200 ok", [])
if path == "/":
return [b"main page"]
elif path == "/index":
return [b"index page"]
else:
return [b"404 page not found"]
if __name__ == '__main__':
server = make_server("127.0.0.1", 8080, run)
server.serve_forever()
web框架
- Django 大而全,重量级框架
- Flask 小而精,自身功能较小,第三方模块多
- Tornado 异步非阻塞