Home URL Check Automation
Post
Cancel

URL Check Automation

업무를 하면서 자산마다 접근 되는지 확인을 하기 위한 작업을 있어 이를 자동화 하는 코드를 만들었습니다.


구조

그림으로 그려본 도식화입니다.

  1. 엑셀 파일에서 URL과 URL 서비스 이름을 읽어옵니다.
  2. 읽어온 데이터를 URL 서비스를 딕셔너리의 키, URL을 딕셔너리의 값으로 저장합니다.
  3. URL Request & Reply
  4. 접근이 불가능 한 경우(DNS 없거나, 타임아웃등) 응답을 error로 만들고 에러 상세 로그를 에러 파일에 저장합니다.
  5. 결과를 보여줍니다.

대충만든 도식화


엑셀 데이터

사용할 데이터 양식입니다. 1행은 헤더 2열은 서비스명, 3열은 URL입니다.

엑셀 데이터 양식


기능 추가

응답 결과가 존재 시(200,304,403등) O, 에러 발생 시 X를 추가하여 엑셀로 저장하는 기능 추가


코드

  • pip install openpyxl, requests
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import requests
import urllib3
import logging
import openpyxl

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) #SSL 에러 무시
logging.basicConfig(filename='error.log', level=logging.ERROR) #SSL 에러 로그로 저장
requests.packages.urllib3.util.ssl_.DEFAULT_CIPHERS = 'ALL:@SECLEVEL=1' #SSL 에러 무시

class colors:
    BLACK = '\033[30m'
    RED = '\033[31m'
    GREEN = '\033[32m'
    YELLOW = '\033[33m'
    BLUE = '\033[34m'
    MAGENTA = '\033[35m'
    CYAN = '\033[36m'
    WHITE = '\033[37m'
    UNDERLINE = '\033[4m'
    RESET = '\033[0m'

def URL_CHECK(URL_list): #Request 보내는 모듈
    wb = openpyxl.Workbook() # 새 워크북 생성
    ws = wb.active # 현재 활성화된 시트 가져오기
    ws.append(['Service Name', 'URL', 'Status']) # 헤더 추가
    for URL in URL_list:
        error = "error"
        if URL == None:
            continue
        try:
            response = requests.get(URL_list[URL], verify=False)
            ws.append([URL, URL_list[URL], 'O']) # 성공 시 O 추가
            print(f"{URL:<20} {response.status_code:^5} {URL_list[URL]:<30}")
        except requests.exceptions.ConnectionError as e: # 응답 에러 발생 시 error 출력 및 에러 상세 로그
            ws.append([URL, URL_list[URL], 'X']) # 실패 시 X 추가
            print(f"{colors.YELLOW}{URL:<20} {error:^5} {URL_list[URL]:<30}{colors.RESET}")
            logging.error(f"{URL:<5} ERROR : {e}")
            continue
    wb.save('health_check_result.xlsx') # 결과 엑셀 파일 저장    
    return


def EXCEL_READ(excel_name): # 엑셀 파일을 읽어옴
    wb = openpyxl.load_workbook(excel_name)
    return wb

def EXCEL_Sheet(wb,Sheet_name): #엑셀 시트를 읽어옴
    Sheet_name = wb[Sheet_name]
    return Sheet_name

def EXCEL_DATA_LOAD(Sheet_name, Column_Service, Column_URL): # 엑셀 데이터를 읽어옴
    for row in Sheet_name.iter_rows(min_row=2, values_only=True): #minrow 2번째 행부터 데이터 읽기, Cell 값만 읽기
        URL_DATA[row[Column_Service-1]] = row[Column_URL-1] #B열의 딕셔너리 키로, C열을 딕셔너리 값으로 가져오기 
    return URL_DATA  

if __name__ == '__main__':
    excel_name = "url.xlsx" #엑셀이름
    Sheet_name = "Sheet1" #엑셀시트이름
    Column_Service = 2 #엑셀 읽어올 딕셔너리 키 열
    Column_URL = 3 #엑셀 읽어올 딕셔너리 값 열
    URL_DATA = {} # 엑셀 데이터 저장할 딕셔너리

    wb = EXCEL_READ(excel_name)
    Sheet = EXCEL_Sheet(wb,Sheet_name)
    URL_DATA = EXCEL_DATA_LOAD(Sheet,Column_Service,Column_URL)
    URL_CHECK(URL_DATA)

결과

결과

잘 출력되는 것을 볼 수 있습니다.

excel_result

엑셀로 저장되는 것을 볼 수 있습니다.

에러

https://glasses96.com 에러 상세 로그 파일도 확인할 수 있습니다.