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