IT정보공유

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

알지오™ 2018. 10. 2.

어쩌다가 보니 팔자에도 없는 비주얼베이직(VB 6.0) 개발을 하게 됐네요. ㅜㅠ
하지만 VB 6.0 아직도 죽지 않고 사용되고 있다는 점에 놀라고 있습니다.

 

각설하고 VB6에서 WebBrowser 를 이용하여 Web Page에 구현되어 있는
POST 방식으로 REST API를 호출하는 샘플 코드를 작성하였고, 
한글의 경우 기본적으로 비주얼베이직6.0이 유니코드를 사용하기 때문에 UTF-8로 변환하는 함수 까지 작성했습니다.

 

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

 

VB6 구성요소 추가 컨트롤 등록
VB6 구성 요소 디자이너 OCX

 

 

도구상에서 위와 같이 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 한글 인코딩/디코딩 방식으로 구현해 보시기 바랍니다.

댓글

💲 추천 글