6.1 问题
起动一个web服务
在web服务器的文档目录下创建目录ban,权限设置为700
编写python程序访问不存在的路径和ban目录,处理404和403错误
404错误打印“无此页面”,403错误打印“无权访问”
6.2 步骤
实现此案例需要按照如下步骤进行。
步骤一:启动一个web服务
[root@localhost ~]# systemctl restart httpd
步骤二:在web服务器的文档目录下创建目录ban,权限设置为700
[root@localhost ~]# mkdir -m 700 /var/www/html/ban
步骤三:如果访问的页面不存在或拒绝访问,程序将抛出异常
执行案例2中get_web.py文件,访问不存在页面,抛出404异常如下:
[root@localhost day11]# python3 get_web.py http://127.0.0.1/abc/ /tmp/abc.html
Traceback (most recent call last):
...
...
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 404: Not Found
执行案例2中get_web.py文件,访问存在页面ban目录,抛出403权限异常如下:
[root@localhost day11]# python3 get_web.py http://127.0.0.1/ban/ /tmp/abc.html
Traceback (most recent call last):
...
...
raise HTTPError(req.full_url, code, msg, hdrs, fp)
urllib.error.HTTPError: HTTP Error 403: Forbidden
步骤三:编写python程序捕获异常
创建get_web3.py文件,实现访问不存在的路径和ban目录时,捕获404和403错误
,同时404错误打印“无此页面”,403错误打印“无权访问”,代码如下:
import sys
from urllib.request import urlopen
from urllib.error import HTTPError #导入urllib.error模块,用HTTPError捕获异常信息
def get_web(url, fname):
try:
html = urlopen(url) #打开网址时即可知道是否有异常,所以将本语句放入try语句
except HTTPError as e: #捕获返回HTTPError类的实例e
print(e)
if e.code == 403: #捕获异常状态码如果等于403
print('权限不足') #输出'权限不足'
elif e.code == 404: #捕获异常状态码如果等于404
print('没有那个地址') #输出'没有那个地址'
return #return后面代码均不执行
with open(fname, 'wb') as fobj:
while True:
data = html.read(4096)
if not data:
break
fobj.write(data)
html.close()
if __name__ == '__main__':
get_web(sys.argv[1], sys.argv[2])
测试脚本执行:
访问不存在页面:
[root@localhost day11]# python3 get_web.py http://127.0.0.1/abc/ /tmp/abc.html
HTTP Error 404: Not Found
没有那个地址
访问ban目录:
[root@localhost day11]# python3 get_web.py http://127.0.0.1/ban/ /tmp/abc.html
HTTP Error 403: Forbidden
权限不足