计算机网络写socket,老师发了个Java的教程,感觉过程是明了,但是代码感觉有点冗杂了,加上学了点python的爬虫,感觉用python还真是挺简洁的,便用python搭个web服务器,整体的思路都是一样的,就是在读入文件的时候恶心了一点,python的编码问题还是有点无语,最终估摸着用二进制读的文件,好歹弄完了,话不多说,奉上代码,还希望多多指教。
import http.server as hs
import sys, os
class RequestHandler(hs.BaseHTTPRequestHandler):
Error_Page = """<HTML>
<HEAD><TITLE>Not Found</TITLE><meta http-equiv="Content-Type" content="text/html; charset=utf-8"/></HEAD>
<BODY><h1>Not Found</h1></BODY></HTML>
"""
def send_content(self, page, status=200, Type="text/html"):
self.send_response(status)
self.send_header("Content-type", Type)
self.send_header("Content-Length", str(len(page)))
self.end_headers()
self.wfile.write(bytes(page))
def do_GET(self):
try:
fileName = os.getcwd() + self.path
print(fileName)
ftype=content_type(fileName)
with open(fileName,'rb') as file:
content = file.read()
file.close()
self.send_content(content, 200,ftype)
except Exception:
content = self.Error_Page.encode(encoding="utf-8")
self.send_content(content, 404)
def content_type(fileName):
if fileName.endswith('.html') | fileName.endswith('.htm'):
return "text/html"
if fileName.endswith('.jpg'):
return "image/jpg"
if fileName.endswith('.txt'):
return "text/plain"
return "application/octet-stream"
if __name__ == '__main__':
httpAddress = ('127.0.0.1', 6789)
httpd = hs.HTTPServer(httpAddress, RequestHandler)
httpd.serve_forever()