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
權限不足
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章