[VB.NET] POST 방식의 HTTPS 통신 시 에러 문제점
조회수 319회
안녕하세요.
제목과 같이 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
댓글 입력