[ASP] 원격 웹서버에 파일이 존재하는지 체크하는 함수 HttpFileExists

지정 URL에 해당하는 파일이 존재하는지 체크하는 HttpFileExists 함수를 만들어 봤다. 파일이 존재하는 경우 파일의 내용을 모두 가지고 오는 방법은 파일의 용량이 큰 경우 성능에 문제가 된다. 성능향상을 위해서 If-Modified-Since 헤더를 이용, 존재 여부만 파악하는 방법을 썼다.

<%
Option Explicit

If HttpFileExist("http://www.ecplaza.net/images/1pixel.gif") Then
    Response.Write "File exists"
Else
    Response.Write "File doesn't exist"
End If

Function HttpFileExist(sUrl)
    Dim oHttp

    set oHttp = Server.CreateObject("MSXML2.ServerXMLHTTP")
    oHttp.Open "GET", sUrl, False

    oHttp.setRequestHeader "If-Modified-Since", DateToHTTPDate(DateAdd("h", -1, Now))
    oHttp.Send ""

    If oHttp.status < 400 Then
        HttpFileExist = True
    Else
        HttpFileExist = False
    End If

    Set oHttp = Nothing
End Function

''
' Converts date (19991022 11:08:38)
' to http form (Fri, 22 Oct 1999 12:08:38 GMT)
Function DateToHTTPDate(ByVal OleDATE)
    Const GMTdiff = #09:00:00#
    OleDATE = OleDATE - GMTdiff
    DateToHTTPDate = engWeekDayName(OleDATE) & _
        ", " & Right("0" & Day(OleDATE),2) & " " & engMonthName(OleDATE) & _
        " " & Year(OleDATE) & " " & Right("0" & Hour(OleDATE),2) & _
        ":" & Right("0" & Minute(OleDATE),2) & ":" & Right("0" & Second(OleDATE),2) & " GMT"
End Function

Function engWeekDayName(dt)
    Dim Out
    Select Case WeekDay(dt,1)
        Case 1:Out="Sun"
        Case 2:Out="Mon"
        Case 3:Out="Tue"
        Case 4:Out="Wed"
        Case 5:Out="Thu"
        Case 6:Out="Fri"
        Case 7:Out="Sat"
    End Select
    engWeekDayName = Out
End Function

Function engMonthName(dt)
    Dim Out
    Select Case Month(dt)
        Case 1:Out="Jan"
        Case 2:Out="Feb"
        Case 3:Out="Mar"
        Case 4:Out="Apr"
        Case 5:Out="May"
        Case 6:Out="Jun"
        Case 7:Out="Jul"
        Case 8:Out="Aug"
        Case 9:Out="Sep"
        Case 10:Out="Oct"
        Case 11:Out="Nov"
        Case 12:Out="Dec"
    End Select
    engMonthName = Out
End Function

%>

관련글 : ASP에서 MSXML2.ServerXMLHTTP 사용하여 원격 웹서버 내용 갖고 오기

Leave a Reply

Your email address will not be published. Required fields are marked *