@Drottarutarnum
Любопытный любитель

Как получить SSL/TLS HTML страницы с помощью WebClient?

Пытаюсь сделать парсер, проблема в том, что иногда (!!) сайт возвращает закодированную страницу, я так понимаю дело в том, что используется HTTPS

Вопрос в том, как заставить GetHtmlCode() выдавать нормальный html, а не
\u001f�\b\0\0\0\0\0\0\v��r�H�.x�f�\u000e8��6�Z�\u0012�?]


using System.Net;
using System.Text;
class Parser {
    public Parser() {
        ServicePointManager.Expect100Continue = true;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
    }

    private string GetHtmlCode(string url) {
        using(var webClient = new WebClient()) {
            webClient.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.BypassCache);
            webClient.Encoding = Encoding.UTF8;

            webClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.12) Gecko/20101026 Firefox/3.6.12");
            webClient.Headers.Add("Accept", "*/*");
            webClient.Headers.Add("Accept-Language", "en-gb,en;q=0.5");
            webClient.Headers.Add("Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");

            var htmlData = webClient.DownloadData(url);
            var htmlCode = Encoding.UTF8.GetString(htmlData);

            return htmlCode;
        }
    }
}
  • Вопрос задан
  • 219 просмотров
Решения вопроса 1
@Drottarutarnum Автор вопроса
Любопытный любитель
Решение
private class GZipWebClient : WebClient {
            protected override WebRequest GetWebRequest(Uri address) {
                var request = (HttpWebRequest)base.GetWebRequest(address);
                request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
                return request;
            }
        }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@MrPhelko
.Net Full Stack Developer
попробуй ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы