어쩌다가 보니 팔자에도 없는 비주얼베이직(VB 6.0) 개발을 하게 됐네요. ㅜㅠ
하지만 VB 6.0 아직도 죽지 않고 사용되고 있다는 점에 놀라고 있습니다.
각설하고 VB6에서 WebBrowser 를 이용하여 Web Page에 구현되어 있는
POST 방식으로 REST API를 호출하는 샘플 코드를 작성하였고,
한글의 경우 기본적으로 비주얼베이직6.0이 유니코드를 사용하기 때문에 UTF-8로 변환하는 함수 까지 작성했습니다.
VB6.0 에서 폼위에 브라우저를 얹으려면 구성요소에서 WebClass 를 별도로 추가해야 됩니다.
도구상에서 위와 같이 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) 등의 방식으로는 정상 동작을 안하더라구요.
ADODB.Stream 방식으로 하니까 UTF-8 한글이 안깨지고 정상적으로 동작을 했습니다.
MultiByteToWideChar API 호출 방식이나 StrConv(vbFromUnicode) 등의 방식으로는 정상 동작을 안하더라구요.
저처럼 한글 인코딩 문제를 겼으시는 분은 없겠지만(VB6을 사용하는 개발자가 드물테니..)
위의 ADODB Stream 방식의 UTF-8 한글 인코딩/디코딩 방식으로 구현해 보시기 바랍니다.
위의 ADODB Stream 방식의 UTF-8 한글 인코딩/디코딩 방식으로 구현해 보시기 바랍니다.
댓글