Python处理下载错误

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
权限不足

你可能感兴趣的:(Python,Devops)