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 통신을 구현해보세요.
'[VB6] 프로그래밍' 카테고리의 다른 글
[VB6.0] 웹브라우저 인터넷 컨트롤러 (WebBrowser) IE 버전 호환성 (0) | 2020.03.28 |
---|---|
[VB6.0] 레지스트리 등록/삭제 (0) | 2020.03.28 |
[VB6.0] sleep을 대체 할수 있는 비동기식 딜레이 (0) | 2020.03.28 |
[VB6.0] 정규식을 이용한 파싱에 유용한 함수들 (0) | 2020.03.28 |
[VB6.0] Selenium 사용시 상단에 테스트 메세지 없애기 (0) | 2020.03.27 |