본문으로 바로가기

[VB6] WebBrowser를 이용한 POST 전송 UTF8 변환

category IT 2018.10.02 17:55

어쩌다가 보니 팔자에도 없는 비주얼베이직(VB 6.0) 개발을 하게 됐네요. ㅜㅠ

하지만 VB 6.0 아직도 죽지 않고 사용되고 있다는 점에 놀라고 있습니다.


각설하고 VB6에서 WebBrowser 를 이용하여 Web Page에 구현되어 있는

POST 방식으로 REST API를 호출하는 샘플 코드를 작성하였고, 

한글의 경우 기본적으로 비주얼베이직6.0이 유니코드를 사용하기 때문에

UTF-8로 변환하는 함수 까지 작성했습니다.


VB6.0 에서 폼위에 브라우저를 얹으려면 구성요소에서 WebClass 를 별도로 추가해야 됩니다.


VB6 구성요소 추가 컨트롤 등록


도구상에서 위와 같이 WBCLSDSR.OCX라고 하는 WebClass를 추가하면 

내장 웹브라우저 컨트롤을 사용할 수 있습니다.


브라우저가 탑재된 폼이 뜰 때 특정 사이트로 이동하면서 ID, PW를 POST 방식으로 호출하는 

샘플 코드입니다. 뭐 특별히 어려울 것이 없을 것으로 보이고, 

저도 VB를 잘 모르다 보니 파라미터에 대한 설명은 검색이나 도움말을 참고 하시기 바랍니다.


샘플코드만 작성해 두겠습니다. (뭐 VB 코드 검색하는 사람이나 있을까 싶기도 합니다)



Private Sub Form_Load()

    Dim header As String
    Dim PostData() As Byte
    
    PostData = StringToUTF8BytesArray("ID=" & "가나다" & "&PW=" & "마바사")
    header = "Content-Type: application/x-www-form-urlencoded" & vbCrLf
 
    brwWebBrowser.Navigate "http://www.restsample.co.kr/login", 14, , PostData, header

End Sub



Public Function StringToUTF8BytesArray(ByVal sText As String) As Byte()

    On Error GoTo ErrLbl
    
    Dim adoStream As ADODB.Stream
    Dim convertData() As Byte
    
    Set adoStream = New ADODB.Stream
    adoStream.Mode = adModeReadWrite
    adoStream.Type = adTypeText
    adoStream.Charset = "utf-8"
    adoStream.Open
    
    adoStream.WriteText sText
    adoStream.Flush
    
    adoStream.Position = 0
    adoStream.Type = adTypeBinary
    adoStream.Read 3
    convertData = adoStream.Read()
    
    adoStream.Close
    StringToUTF8BytesArray = convertData
ErrLbl:
    
End Function


Public Function UTF8ByteArrayToString(ByRef byteArray() As Byte) As String
    On Error GoTo ErrLbl

    Dim adoStream As ADODB.Stream
    Dim sConvertText As String
    
    Set adoStream = New ADODB.Stream
    adoStream.Mode = adModeReadWrite
    adoStream.Type = adTypeText
    adoStream.Charset = "utf-8"
    adoStream.Open
    
    adoStream.Write byteArray
    adoStream.Flush
    
    adoStream.Position = 0
    adoStream.Type = adTypeText
    sConvertText = adoStream.ReadText
    
    adoStream.Close
    
    UTF8ByteArrayToString = sConvertText
ErrLbl:
    
End Function


저도 VB가 처음이다 보니 인터넷 검색을 많이 했는데, 다른 방식으로는 다 안되고
ADODB.Stream 방식으로 하니까 UTF-8 한글이 안깨지고 정상적으로 동작을 했습니다.

MultiByteToWideChar API 호출 방식이나 StrConv(vbFromUnicode) 등의 방식으로는
정상 동작을 안하더라구요.

저처럼 한글 인코딩 문제를 겼으시는 분은 없겠지만(VB6을 사용하는 개발자가 드물테니..)
위의 ADODB Stream 방식의 UTF-8 한글 인코딩/디코딩 방식으로 구현해 보시기 바랍니다.