Ошибка в WebRequest.GetResponse() и протокол HTTPS
Сегодня получится краткий обзор об исключении, которое возникает при попытке получить содержимое страницы с использованием метода GetResponse() класса WebRequest. При этом страницы сайтов, получаемые через незащищенное соединение (протокол HTTP), отрабатывают без каких-либо ошибок. А вот, если вы захотите получить страницу через защищенное соединение (протокол HTTPS), то могут возникнуть некоторые трудности.
Внимание! Не для всех страниц с протоколом HTTPS возникает исключительная ситуация. Например, исключение может быть при использовании сайтом бесплатного сертификата Let’s Encrypt, использующего TLS шифрование.
Самые распространенные исключения, которые возникают:
System.Net.WebException: "Базовое соединение закрыто: Непредвиденная ошибка при передаче. "IOException: Не удается прочитать данные из транспортного соединения: Удаленный хост принудительно разорвал существующее подключение. SocketException: Удаленный хост принудительно разорвал существующее подключение
Ниже приведу пример кода для получения содержимого web-страницы (рабочий вариант):
using System; using System.IO; using System.Net; namespace ConsoleApp1 { class Program { static void Main(string[] args) { string url = "https://www.petrolplus.ru"; // Без этой строки возможно выскакивание исключения! ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; WebRequest request = WebRequest.Create(url); request.Credentials = CredentialCache.DefaultCredentials; WebResponse response = request.GetResponse(); Console.WriteLine(((HttpWebResponse)response).StatusDescription); Stream dataStream = response.GetResponseStream(); StreamReader reader = new StreamReader(dataStream); string responseFromServer = reader.ReadToEnd(); Console.WriteLine(responseFromServer); reader.Close(); response.Close(); Console.ReadKey(); } } }
Как видно из примера кода строка ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
гарантирует, что не будет проблем с сертификатом. Здесь мы присваиваем протокол TLS 1.2.
Спасибо всем за внимание.
Спасибо, помогло
Рады помочь,