대본
WebRequest를 만들려고하는데 다음과 같은 오류가 발생합니다.
기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.
내부 예외를 파헤 치면 다음과 같은 결과를 얻었습니다.
"전송 연결에서 데이터를 읽을 수 없습니다. 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다."
요청을 수행하는 코드는 다음과 같습니다.
private static Hashtable exec (String method, String uri, Object data, String contentType) {
Hashtable response;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create (API_BASE_URL + uri);
request.UserAgent = "MercadoPago .NET SDK v"+MP.version; //version resolves to 0.3.4
request.Accept = MIME_JSON; // application/json
request.Method = method; //GET
request.ContentType = contentType; //application/json
setData (request, data, contentType); //setData in this case does nothing.
String responseBody = null;
try {
HttpWebResponse apiResult = (HttpWebResponse)request.GetResponse (); //Error throws here
responseBody = new StreamReader (apiResult.GetResponseStream ()).ReadToEnd ();
response = new Hashtable();
response["status"] = (int) apiResult.StatusCode;
response["response"] = JSON.JsonDecode(responseBody);
} catch (WebException e) {
Console.WriteLine (e.Message);
}
}
내가 이미 한 일 :
그 요청은 약 4 일 전에 C #을 통해 정상적으로 작동하고 갑자기 문제가 발생하기 시작했지만 Postman에 대해 괜찮다고 응답한다는 사실을 고려할 때 문제가 어디에 있는지 파악할 수 없습니다.
Postman의 응답은 다음과 같습니다.
편집 : Fiddler 청취로 두 요청을 모두 수행했습니다. Postman의 결과는 HTTPS를 사용하는 API에 대한 직접 요청을 보여줍니다. 내 ConsoleApplication으로 시도 할 때 API 엔드 포인트 포트 443에 대한 터널을 만드는 HTTP 요청을 표시합니다.
터널 요청에 대한 Fiddler의 TextView는 다음과 같이 말합니다.
아주 오래된 날짜를 가리키는 "시간"필드를 발견했지만 그게 무슨 뜻인지 모르겠습니다.
그것을 알아 냈습니다. TLS1.2 사용을 포함해야했습니다.
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다