5
实现显示图片
1、我们在WebServer目录下新建一个名为index.html文件,并写入以下内容:
<html> <body> < a href="/pages/">pages</ a> </body> </html>
2、然后在WebServer目录下新建一个文件夹pages,并在该目录下新建一个名为index.html的文件,并写入以下内容:
<html> I like this pic:<br> <img src="pic.jpg"/> </html>
3、在pages目录下保存一个jpg格式的图像文件,并将其命名为pic.jpg
4、这一步,我们更新server.py文件为以下内容:
# 导入socket包 import socket # 服务器IP与端口 HttpPort = 18080 HttpHost = ('localhost', HttpPort) # 头部信息 HttpHtmlResponseHeader = '''HTTP/1.1 200 OK Content-Type: text/html;charset=UTF-8 ''' HttpImageResponseHeader = '''HTTP/1.1 200 OK Content-Type: image/jpg ''' # Header与Body分隔符 LineSeparator = '\r\n\r\n' # HTTP响应 HttpResponseBody = '' # HTTP响应Bytes HttpResponse = ''.encode(encoding='utf-8') # 创建基于IPV4 TCP的socket ServerSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # socket的绑定与监听 ServerSocket.bind(HttpHost) ServerSocket.listen(100) print("server is running at http://localhost:%d" % HttpPort) # 获取HTTP请求报头 def get_headers(request): # 分隔符切割 headers_array = request.split('\r\n') # HTTP请求头首行 是请求方法 请求路径 HTTP协议版本 headers = {} for header_item in headers_array[1:]: item_ = header_item.split(': ') headers[item_[0]] = item_[1] return headers # 获取URL参数 def get_get_args(request_url): get_args_arr = request_url[request_url.find('?') + 1:].split('&') # print(get_args_arr) get_args = {} try: for get_item in get_args_arr: item_ = get_item.split('=') get_args[item_[0]] = item_[1] return get_args except: return {} # 获取POST表单参数 def get_post_args(request_body): post_args_arr = request_body.split('&') post_args = {} for post_item in post_args_arr: item_ = post_item.split('=') post_args[item_[0]] = item_[1] return post_args # 处理客户端连接 while True: Client, Address = ServerSocket.accept() # 客户端的HTTP请求 Request = Client.recv(1024).decode(encoding='utf-8') # 将请求分为报头与主体 RequestText = Request.split(LineSeparator) # 报头 RequestHeader = RequestText[0] # 主体 RequestBody = RequestText[1] # 请求方法 RequestMethod = RequestHeader.split(' ')[0] # 请求路径 RequestUrl = RequestHeader.split(' ')[1].split('?')[0] # 请求头部 RequestHeaders = get_headers(RequestHeader) # 响应清空 HttpResponseBody = '' HttpResponse = ''.encode(encoding='utf-8')
5、我们执行 python3 server.py
,并打开浏览器输入之前的地址,可以看到以下输出:
我们点击pages,可以看到我们的图片也加载出来啦!
不错,我们的服务器工作良好!
6
总结
我们从0实现了一个简单的Web服务器(HTTP服务器),从最开始的只能显示一段文本到解析用户提交的参数与表单,并实现了图片的显示与静态网页文件的加载,有没有感到成就感满满呢?不过我们的服务器还是相当的简陋,期待大家按照自己的想法去对HTTP的其他方法进行实现与扩展:)
自知才疏学浅,如果文章中有错误还请各位读者斧正,如果您觉得本文内容对您有所帮助,可以考虑请我吃包辣条~