[VB.NET] POST 방식의 HTTPS 통신 시 에러 문제점

조회수 79회

안녕하세요.

제목과 같이 VBNET 언어에서 POST 방식의 HTTPS 통신을 하려고 합니다.

PostMan 통해선 정상적으로 호출이 되는 API 입니다만, VBNET 언어를 통해서 로컬 테스트 진행 중인데 아래의 API 통신 함수를 호출하면 아래와 같이 에러 메시지가 발생되며 통신 실패가 됩니다..

에러메시지 및 통신 소스코드 공유 드리니 원인이 무엇인지 답변 좀 부탁 드리겠습니다!

[에러메시지] 예외 발생: 'System.Net.WebException'(System.dll) ERROR C0: System.Net.WebException: 기본 연결이 닫혔습니다. 보내기에서 예기치 않은 오류가 발생했습니다. ---> System.IO.IOException: 원격측에서 전송 스트림을 닫았으므로 인증에 실패했습니다. 위치: System.Net.Security.SslState.StartReadFrame(Byte[] buffer, Int32 readBytes, AsyncProtocolRequest asyncRequest) 위치: System.Net.Security.SslState.StartReceiveBlob(Byte[] buffer, AsyncProtocolRequest asyncRequest) 위치: System.Net.Security.SslState.CheckCompletionBeforeNextReceive(ProtocolToken message, AsyncProtocolRequest asyncRequest) 위치: System.Net.Security.SslState.ForceAuthentication(Boolean receiveFirst, Byte[] buffer, AsyncProtocolRequest asyncRequest, Boolean renegotiation) 위치: System.Net.Security.SslState.ProcessAuthentication(LazyAsyncResult lazyResult) 위치: System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 위치: System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 위치: System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) 위치: System.Net.TlsStream.ProcessAuthentication(LazyAsyncResult result) 위치: System.Net.TlsStream.Write(Byte[] buffer, Int32 offset, Int32 size) 위치: System.Net.PooledStream.Write(Byte[] buffer, Int32 offset, Int32 size) 위치: System.Net.ConnectStream.WriteHeaders(Boolean async) --- 내부 예외 스택 추적의 끝 --- 위치: System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) 위치: System.Net.HttpWebRequest.GetRequestStream()

[API 통신 함수 소스]

Public Shared Function WebrequestWithPost(ByVal url As String, ByVal json As String) As String
        Dim postDataAsByteArray As Byte() = Encoding.UTF8.GetBytes(json)
        Dim returnValue As String = String.Empty

        Try
            Dim webRequest As WebRequest = WebRequest.Create(url)
            If (Not (webRequest) Is Nothing) Then
                webRequest.Method = "POST"
                webRequest.ContentType = "application/x-www-form-urlencoded"
                webRequest.ContentLength = postDataAsByteArray.Length
                'webRequest.Headers.Add("Authorization", "DT=XGH82KDLJIFIQxneEzfKrdSiKrf7K390PHUuwFp3AEd")
                Dim requestDataStream As Stream = webRequest.GetRequestStream
                requestDataStream.Write(postDataAsByteArray, 0, postDataAsByteArray.Length)
                requestDataStream.Close()
                Dim response As WebResponse = webRequest.GetResponse
                Dim responseDataStream As Stream = response.GetResponseStream
                System.Diagnostics.Debug.WriteLine("response: " + response.ToString)
                If (Not (responseDataStream) Is Nothing) Then
                    Dim responseDataStreamReader As StreamReader = New StreamReader(responseDataStream)
                    returnValue = responseDataStreamReader.ReadToEnd
                    responseDataStreamReader.Close()
                    responseDataStream.Close()
                    System.Diagnostics.Debug.WriteLine("returnValue: " + returnValue.ToString)
                End If
                response.Close()
                requestDataStream.Close()
            End If
        Catch ex As WebException
            System.Diagnostics.Debug.WriteLine("ERROR C0: " + ex.ToString)
            System.Diagnostics.Debug.WriteLine("ERROR C1: " + ex.Status.ToString)
            System.Diagnostics.Debug.WriteLine("ERROR C2: " + WebExceptionStatus.ProtocolError.ToString)
            If (ex.Status = WebExceptionStatus.ProtocolError) Then
                Dim response As HttpWebResponse = CType(ex.Response, HttpWebResponse)
                'handle this your own way.
                Console.WriteLine("Webexception! Statuscode: {0}, Description: {1}", CType(response.StatusCode, Integer), response.StatusDescription)
                System.Diagnostics.Debug.WriteLine("ERROR A1: " + response.StatusDescription.ToString)
                System.Diagnostics.Debug.WriteLine("ERROR A2: " + CType(response.StatusCode, Integer).ToString)
            End If
        Catch ex As Exception
            'handle this your own way, something serious happened here.
            Console.WriteLine(ex.Message)
            System.Diagnostics.Debug.WriteLine("ERROR B: " + ex.Message.ToString)
        End Try
        Return returnValue
    End Function
  • Authorization 헤더 입력이 주석 처리돼 있는 듯한데 그건 관계 없나요? 엽토군 2023.1.1 14:55

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)