04-返回指定页面内容2
目标¶
- 能够解决资源访问过程中存在的问题
1. 如果访问的页面不存在怎么办?¶
如果访问一个不存在的页面,如: http://192.168.31.124:8080/xxx.html
服务器报错
FileNotFoundError: [Errno 2] No such file or directory: 'static/xxx.html'
原因分析:xxx.html
在 static/xxx.html
路径下不存在,导致with open 无法打开对应路径下的文件,所以报错!
# 3.5 根据资源路径,读取对应路径下的文件,并展示
with open("static"+user_request['path'], "rb") as file:
response_body = file.read()
解决办法: 给 with ... open
代码增加异常处理,上述代码改为:
try:
# 3.5 根据资源路径,读取对应路径下的文件,并展示
with open("static"+user_request['path'], "rb") as file:
response_body = file.read()
except Exception as e:
# 重新设置响应行
response_line = "HTTP/1.1 404 Not Found\r\n"
response_body = "Error!! %s" % str(e)
# 字符串转换为把二进制数据数据
response_body = response_body.encode()
2. 默认首页判断¶
当我们直接在地址栏输入:http://192.168.31.124:8080/
发现报错,这是因为:
http://192.168.31.124:8080 ---> 请求行是这样的 “GET / HTTP/1.1“ ,资源路径为 “/“
此时服务器端无法正确读取文件
当出现这种问题后,应该访问默认的首页,也即是
static/index.html
页面
改进如下:
if file_path == "/":
file_path = "/index.html"
运行结果: