vb6 WinHTTP 통신시 서버의 상태가 항상 쾌적한것은 아니기 때문에

적절한 에러 처리와 재통신을 시도하여야 하는 상황이 있습니다.

그럴때 아래의 WinHTTP 함수 예제를 이용하여 코딩하시면 만족스럽게 사용할 수 있습니다.

 

[소스 코드]

 

Function oWinhttp_GetData(Winhttp As Object, ByVal rType As Integer, ByVal wType As String, ByVal Url As String, ParamArray vParams() As Variant) As String

On Error GoTo error

    Dim SizeParam As Long

    Dim i As Long

    

    SizeParam = UBound(vParams) + 1

    With Winhttp

        Select Case UCase(wType)

            Case "GET"

                .Open "GET", Url, True

                Do

                    If i >= SizeParam Then: Exit Do

                    .SetRequestHeader Split(vParams(i), ": ")(0), Split(vParams(i), ": ")(1)

                    i = i + 1

                Loop

                .send

                .WaitForResponse

            Case "POST"

                If SizeParam >= 0 Then

                    .Open "POST", Url, True

                    Do

                        If i >= SizeParam - 1 Then: Exit Do

                        .SetRequestHeader Split(vParams(i), ": ")(0), Split(vParams(i), ": ")(1)

                        i = i + 1

                    Loop

                    .send vParams(i)

                    .WaitForResponse

                End If

        End Select

        

        

        Select Case rType

            Case 0

                oWinhttp_GetData = .ResponseText

            Case 1

                oWinhttp_GetData = .GetAllResponseHeaders

        End Select

    End With

error: '에러가 발생하면 타임아웃이나, 자체버그로 인해 발생한거니까 일로와짐

        '리턴값에 딱히 조절한게 없으므로 ""를 리턴값으로 가짐

    Winhttp.Abort

End Function

 

[활용 예제]

 

Dim Winhttp As Object

Set Winhttp = CreateObject("Winhttp.WinHttpRequest.5.1")

 

Do

       wData = oWinhttp_GetData(Winhttp, 0, "GET", "http://naver.com", _

                                                        "Content-Type: application/x-www-form-urlencoded", _

                                                        "User-Agent: Mozilla/5.0(iPad; U; iPhone OS 3_2; en-us) AppleWebKit/531.21.10 Mobile/7B314")

        If Len(wData) Then: Exit Do '타임아웃이 발생하거나 오류가 발생하면 Len(wData) = 0 이므로, 

                                     'Len(wData) = true 이면 루프를 종료함

        Sleep 1000

         '루프가 종료되지 않았다면 1초 기다렸다가 재접속

Loop

 

Do Loop 문을 이용하여 호출하는 URL로부터 값을 받지 못했을댄 sleep 함수를 이용해 1초후 재 호출 합니다.

위에 소스코드에서 보면 에러처리를 통해 프로그램 자체가 작동중지 또는 오류를 뿜지 않도록 처리 해야합니다.

 

위 예제를 통해 응용하여 vb6에서 보다 완벽한 winhttp 통신을 구현해보세요.

+ Recent posts