通过socket入门html
代码实现:
socket 1
1import socket 2import re 3from threading import Thread 4 5server = socket.socket() 6server.bind(('127.0.0.1',8899)) 7server.listen() 8 9while 1: 10 conn,addr = server.accept() 11 12 def home(conn): 13 with open('test.html','rb') as f: 14 data = f.read() 15 conn.send(data) 16 conn.close() 17 18 def nofount(conn): 19 conn.send(b'not found 404') 20 conn.close() 21 22 urlpatterns = [ 23 ('/',home), 24 ] 25 26 b_msg = conn.recv(1024) 27 path = b_msg.decode('utf-8').split(' ')[1] 28 print(path) 29 conn.send(b'HTTP/1.1 200 ok\r\n\r\n') 30 31 for url in urlpatterns: 32 if path == url[0]: 33 t = Thread(target=url[1],args=(conn,)) 34 t.start() 35 break 36 37 else: 38 t = Thread(target=nofount, args=(conn,)) 39 t.start()
socket 2
1import socket 2from threading import Thread 3 4sk = socket.socket() 5sk.bind(('127.0.0.1',8001)) 6sk.listen() 7def func1(conn): 8 conn.send(b'HTTP/1.1 200 ok\r\ncontent-type:text/html\r\ncharset:utf-8\r\n\r\n') 9 with open('test.html','rb') as f: 10 data = f.read() 11 conn.send(data) 12 conn.close() 13 14def func2(conn): 15 conn.send(b'HTTP/1.1 200 ok\r\n\r\n') 16 with open('sdf','rb') as f: 17 pic_data = f.read() 18 conn.send(pic_data) 19 conn.close() 20 21def func3(conn): 22 conn.send(b'HTTP/1.1 200 ok\r\n\r\n') 23 with open('test.css','rb') as f: 24 css_data = f.read() 25 conn.send(css_data) 26 conn.close() 27 28def func5(conn): 29 conn.send(b'HTTP/1.1 200 ok\r\n\r\n') 30 with open('test.js', 'rb') as f: 31 js_data = f.read() 32 conn.send(js_data) 33 conn.close() 34 35def func4(conn): 36 conn.send(b'HTTP/1.1 200 ok\r\n\r\n') 37 with open('wechat.ico', 'rb') as f: 38 ico_data = f.read() 39 conn.send(ico_data) 40 conn.close() 41 42l1 = [ 43 ('/', func1), 44 ('/meinv.png',func2), 45 ('/test.css',func3), 46 ('/wechat.ico',func4), 47 ('/test.js',func5), 48] 49 50def fun(path, conn): 51 for i in l1: 52 if i[0] == path: 53 t = Thread(target=i[1], args=(conn,)) 54 t.start() 55 56while 1: 57 conn, addr = sk.accept() 58 b_msg = conn.recv(1024) 59 str_msg = b_msg.decode('utf-8') 60 path = str_msg.split('\r\n')[0].split(' ')[1] 61 print(path) 62 63 fun(path, conn)
socket 3
1import socket 2sk = socket.socket() 3sk.bind(('127.0.0.1',8080)) 4sk.listen() 5 6def index(url): 7 with open("test.html","r",encoding='utf8') as f: 8 s = f.read() 9 return bytes(s,encoding='utf8') 10 11def home(url): 12 with open('./html/form.html','r',encoding='utf8') as f: 13 s = f.read() 14 return bytes(s, encoding="utf8") 15 16list1 = [ 17 ("/index/", index), 18 ("/home/", home), 19] 20 21while 1: 22 conn, add = sk.accept() 23 data = conn.recv(8096) 24 data = str(data, encoding="utf8") 25 data1 = data.split('\r\n')[0] 26 url = data1.split()[1] 27 conn.send(b'HTTP/1.1 200 OK\r\n\r\n') 28 func = None 29 for i in list1: 30 if i[0] == url: 31 func = i[1] 32 break 33 if func: 34 response = func(url) 35 else: 36 response = b'404 not found' 37 38 conn.send(response) 39 conn.close()
socket 4
1import socket 2import time 3 4sk = socket.socket() 5sk.bind(('127.0.0.1',8080)) 6sk.listen() 7 8def index(url): 9 with open('test.html','r',encoding='utf8') as f: 10 s = f.read() 11 now = str(time.time()) 12 s = s.replace("{{x}}",now) 13 return bytes(s, encoding='utf8') 14 15def home(url): 16 with open("./html/test.html",'r',encoding='utf8') as f: 17 s = f.read() 18 return bytes(s, encoding='utf8') 19 20list1 = [ 21 ("/index/",index), 22 ("/home/", home), 23] 24 25while 1: 26 conn, add = sk.accept() 27 data = conn.recv(8096) 28 29 data = str(data, encoding='utf8') 30 data1 = data.split("\r\n")[0] 31 url = data1.split(' ')[1] 32 conn.send(b"HTTP/1.1 200 OK\r\n\r\n") 33 func = None 34 for i in list1: 35 if i[0] == url: 36 func = i[1] 37 break 38 if func: 39 response = func(url) 40 else: 41 response = b'404 not found!' 42 43 conn.send(response) 44 conn.close() 45
通过wsgiref实现网络访问
1from wsgiref.simple_server import make_server 2 3def application(environ, start_response): 4 """ 5 6 :param environ: 7 :param start_response: 8 :return: 9 """ 10 start_response('200 OK', [('Content-Type', 'text/html'),('k1','v1')]) 11 print(environ['PATH_INFO']) 12 return [b'<h1>Hello, web!</h1>'] 13 14httpd = make_server('127.0.0.1',8080,application) 15 16httpd.serve_forever()
通过jinja2模块渲染页面
1from wsgiref.simple_server import make_server 2from jinja2 import Template 3 4def index(): 5 with open('test.html','r',encoding='utf-8') as f: 6 data = f.read() 7 template = Template(data) 8 ret = template.render({"name":'alex','hobby':'eat'}) 9 return [bytes(ret, encoding='utf8')] 10 11URL_LIST = [ 12 ('/index/', index) 13] 14 15def run_server(environ, start_response): 16 start_response('200 OK', [('Content-Type', 'text/html'),('k1','v1')]) 17 url = environ['PATH_INFO'] 18 func = None 19 for i in URL_LIST: 20 if i[0] == url: 21 func = i[1] 22 break 23 if func: 24 return func() 25 else: 26 return [bytes('404没有该页面',encoding='utf8')] 27 28if __name__ == '__main__': 29 httpd = make_server('',8000,run_server) 30 httpd.serve_forever()