[Delphi/Tip] 웹페이지 URL 유효성 검토
[개발 실전에서 바로 쓸 수 있는 라이브 코드 프로젝트]
웹페이지의 유효성(올바른 URL인지 여부 판단)을 체크해 보자.
때로는 웹사이트에서 이미지 또는 파일을 다운로드 받도록 프로그래밍 된 프로젝트에서 수많은 컨텐츠 중에 삭제 되거나 변경되어 다운로드 받지 못하는 경우가 발생할 수 있다. 해당 URL을 오픈해 보고 404등 HTTP프로토콜 오류에 대해 처리할 수 있으나 빠른 접근 법으로 해당 페이지 URL이 유효한지 체크해 볼 수 있다.
이를 위해 Indy 컴포넌트를 사용해서 해결 할 수도 있으나 어쩐지 무거운 감이 드는게 사실이다. 따라서 윈도우 시스템에서 제공하는 API를 랩핑하여 델파이에서 기본 제공하는 Winiet Delphi Runtime Library를 사용해서 해결 해 보자
다음 모듈을 그대로 가져다 사용하면 될 것이지만
여기서 한 가지 해당 API 호출 시에 웹서버의 리턴을 받지 못해 프로그램이 얼어 버리는 경우(응답없음) 상태가 발생할 수 있으니 타임아웃을 반드시 지정해 주면 좋겠다.
uses wininet; {$R *.dfm} // 웹서버에 해당 URL이 유효한지 체크한다 // 전체페이지를 다운로드 받아보지 않아도 된다. function IsUrlValid(const url: string; ATimeoutMSec : Integer = 0): boolean; var hInet: HINTERNET; hConnect: HINTERNET; infoBuffer: array [0..512] of char; dummy: DWORD; bufLen: DWORD; okay: LongBool; reply: String; begin if pos('://-', url) >0 then begin result := false; exit; end; hInet := InternetOpen(PChar('EYECOMA'), INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY,nil,nil,0); //타임아웃을 지정할 수 있음 //간혹 지정하지 않는 경우 무한루프에 빠질 수도 있으니 지정하기를 권장 //적어도 1~2초 이내에는 반환 하는 것이 정상이므로 2초 정도 권장 if ATimeoutMSec>0 then InternetSetOption(hInet, INTERNET_OPTION_CONNECT_TIMEOUT, @ATimeoutMSec, SizeOf(ATimeoutMSec)); //연결해 본다.. hConnect := InternetOpenUrl(hInet,PChar(url),nil,0, INTERNET_FLAG_NO_UI,0); if not Assigned(hConnect) then // URL이 잘못된 경우 연결을 Open할 수 없다 result := false else begin // Wininet을 이용해 호출할 URL 정보를 만든다. dummy := 0; bufLen := Length(infoBuffer); okay := HttpQueryInfo(hConnect,HTTP_QUERY_STATUS_CODE, @infoBuffer[0],bufLen,dummy); if not okay then // 인터넷 연결이 안되있는 경우. result := False else begin reply := infoBuffer; if reply = '200' then // 네비게이션 웹페이지가 존재 한다 result := True else if reply = '401' then // 대부분 페이지는 존재하지만 인증 문제가 있다. // 어떤 인증문제인지는 체크 불가함 result := True else if reply = '404' then // 호출 대상 파일을 찾을 수 없다. result := False else if reply = '500' then // 대부분 웹서버 내부 오류 result := False else {TODO:HTTP프로토콜의 다른 응답 코드에 대해 이 부분에서 추가 처리할것} result := False; end; InternetCloseHandle(hConnect); end; InternetCloseHandle(hInet); end;
도움이 되셨다면 광고 한 번 클릭해주는 매너손^^
데모 프로젝트 파일 다운로드 : CheckValidURL.zip
'프로그래밍 > Delphi' 카테고리의 다른 글
[델파이/Tips] 관리자 권한으로 실행하기 (2) | 2019.02.20 |
---|---|
[Delphi/Tip] TListView에서 ListItem 순서바꾸기/이동 (0) | 2018.11.01 |
[Demo-Delphi]웹브라우저에서 자바스크립트로 델파이 코드 실행하기 (0) | 2018.10.30 |
[Delphi/Tip] 디렉토리 선택 다이얼로그 호출하기 (0) | 2018.10.18 |
[강좌-Delphi] 웹브라우저(TWebBrowser)의 사용자 인터페이스 커스터마이징[데모] (0) | 2018.10.14 |