HttpClient - опять мелкомягким неймётся!
От: Kolesiki  
Дата: 20.04.19 00:58
Оценка: :))
Ребят, очередная лепёшка дерьма засада из стана мелкомягких:
Есть HttpClient (который типа новый путь взамен старого WebClient). Есть простейший сайт валют: www.x-rates.com (требующий https).
Пишем простейший код получения html странички:

var cli = new HttpClient();
var html = await cli.GetStringAsync(@"https://www.x-rates.com/");


Если сканпелять проект под .NET 4.6.1 — всё отлично, код работает, получили страничку.
Меняем на .NET 4.7.1+ — всё, кранты — не работает! Это как вообще так?? Пишет ошибку "удалённый сервер закрыл соединение".
Очевидно, танцоры-улучшатели уже наконопатили чего-то там внутрях, что совместимость нарушена, а то и вообще новый код получился нерабочий.

Я плюнул на их "косоногие хэлперы" и вот во время низкоуровневых игр с SslStream читаю доку на SslStream.AuthenticateAsClient():

Starting with .NET Framework 4.7, this method authenticates using None, which allows the operating system to choose the best protocol to use, and to block protocols that are not secure.


И вот тут меня осенило, откуда руки из *опы растут! Скорее всего HttpClient юзает низлежащий SslStream, где и получает отлуп.
Не кажется ли программирующей публике, что мелкомягкие опять охренели в край и своей "заботой о защите" ломают чужой код и отрезают программиста от половины тырнета? Причём даже без возможности специально указать HttpClient'у "хватит выёживаться своей диктатурой и дай нормально забрать страницу по чуть менее надёжному протоколу".
Кто-нибудь сталкивался с этими костылями и смог их обойти?
Re: HttpClient - опять мелкомягким неймётся!
От: Mystic Artifact  
Дата: 20.04.19 01:08
Оценка: 8 (1) +5
Здравствуйте, Kolesiki, Вы писали:

Рекомендую всегда настраивать все что можно в ServicePointManager и протоколы тоже, ведь там есть очевидные гонки. Конфигр для слабаков. Мсднится это вроде легко. Может заблокировали старые насовсем... Х.з. сомневаюсь.

Ну и было бы очень хорошо, если бы Ваш, тон соответствовал проблеме: а именно не стоит выеденного яйца. И взывать о вселенском айайа тут не стоит. Здесь технический форум — хочешь достойный ответь, потрудись совладать с языком.
Re: HttpClient - опять мелкомягким неймётся!
От: blp  
Дата: 20.04.19 01:22
Оценка: 16 (1)
вот тут обсуждение на эту же тему и светы по воркэраундам (в частности, можно поменять то, что ОС "считает секьюрным")
https://github.com/dotnet/corefx/issues/21577
Re: HttpClient - опять мелкомягким неймётся!
От: Слава  
Дата: 20.04.19 06:25
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>И вот тут меня осенило, откуда руки из *опы растут! Скорее всего HttpClient юзает низлежащий SslStream, где и получает отлуп.


Это типично для SSL, и при создании HttpClient есть возможность повесить специальный хэндлер для разбирательств с SSL и прочим.
Re: HttpClient - опять мелкомягким неймётся!
От: Doc Россия http://andrey.moveax.ru
Дата: 20.04.19 10:57
Оценка: +1 :)))
Здравствуйте, Kolesiki, Вы писали:

K>Ребят, очередная лепёшка дерьма засада из стана мелкомягких:


Ребят, очередной истерический [s]высер[s] мессадж от из стана Kolesiki:
Есть HttpClient, создаем консольное приложение под .NET 4.7.2 (который типа новый путь взамен старого 4.6.1) и пишем
namespace ConsoleApp1
{
    using System;
    using System.Net.Http;
    using System.Threading.Tasks;

    class Program
    {
        static async Task Main(string[] args)
        {
            var cli = new HttpClient();
            var html = await cli.GetStringAsync(@"https://www.x-rates.com/");

            Console.WriteLine(html);
            Console.ReadKey(true);
        }
    }
}


Если сканпелять это — всё отлично, код работает, получили страничку.
Смотрим на сообщение Kolesiki и понимаем что у него руки из *опы растут!

Не кажется ли программирующей публике, что Kolesiki опять охренели в край и своей истерикой о Микрософт отвлекает остальных программистов от реальных дел и отдыха?
Re[2]: HttpClient - опять мелкомягким неймётся!
От: alexander_r  
Дата: 20.04.19 11:21
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Здравствуйте, Kolesiki, Вы писали:


K>>Ребят, очередная лепёшка дерьма засада из стана мелкомягких:


Doc>Ребят, очередной истерический [s]высер[s] мессадж от из стана Kolesiki:

Doc>Есть HttpClient, создаем консольное приложение под .NET 4.7.2 (который типа новый путь взамен старого 4.6.1) и пишем
Doc>
Doc>namespace ConsoleApp1
Doc>{
Doc>    using System;
Doc>    using System.Net.Http;
Doc>    using System.Threading.Tasks;

Doc>    class Program
Doc>    {
Doc>        static async Task Main(string[] args)
Doc>        {
Doc>            var cli = new HttpClient();
Doc>            var html = await cli.GetStringAsync(@"https://www.x-rates.com/");

Doc>            Console.WriteLine(html);
Doc>            Console.ReadKey(true);
Doc>        }
Doc>    }
Doc>}
Doc>

Проверил ваш пример
на 4.6.2 — работает
на 4.7.1+ — нет
Re[3]: HttpClient - опять мелкомягким неймётся!
От: Doc Россия http://andrey.moveax.ru
Дата: 20.04.19 14:07
Оценка:
Здравствуйте, alexander_r, Вы писали:

_>на 4.6.2 — работает

_>на 4.7.1+ — нет

Я запускал на 4.7.2. Сейчас пересобрал под 4.7.1. Тоже ок.
Как-то так
Re[4]: HttpClient - опять мелкомягким неймётся!
От: Jack128  
Дата: 20.04.19 18:47
Оценка: +3 :)
Здравствуйте, Doc, Вы писали:

Doc>Здравствуйте, alexander_r, Вы писали:


_>>на 4.6.2 — работает

_>>на 4.7.1+ — нет

Doc>Я запускал на 4.7.2. Сейчас пересобрал под 4.7.1. Тоже ок.

Doc>Как-то так

Вы не фрейвоки, а оси сравните.
Re[5]: HttpClient - опять мелкомягким неймётся!
От: Kolesiki  
Дата: 20.04.19 20:31
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Вы не фрейвоки, а оси сравните.


Хороший совет, но уж чересчур косвенный! Конечно же работаю в православной Win7x64! Но с другой стороны, кого это должно парить-то? Это операционная система, её дело — самые низкоуровневые фичи обеспечивать. Более того — фрэймворк как раз и должен нивелировать различия систем. А у мелкомягкой индусни похоже наоборот — тащат всех за хвост и гриву в своё стойло "десятников", недообеспечивая функционал семёрки. Более того — почему-то Опера вообще не ругается на сайт — на каком протоколе смогла законнектиться — на том и забрала страницу. Задача клиента — не выёживаться, а обеспечить доставку информации. Более того — и "информация"-то — так себе, прости господи — курсы валют! Ни паролей, ни эккаунтов.
Re[2]: HttpClient - опять мелкомягким неймётся!
От: Kolesiki  
Дата: 20.04.19 20:58
Оценка: -1
Здравствуйте, Mystic Artifact, Вы писали:

MA>Здравствуйте, Kolesiki, Вы писали:


MA> Рекомендую всегда настраивать все что можно в ServicePointManager и протоколы тоже


Кто б знал... А главное — мелкомягкие почему-то вообще не чешутся объяснениями, что они напортачили и как заставить старый код работать. Ведь это явный breaking changes, который обязан описываться во всех подробностях!

MA> Ну и было бы очень хорошо, если бы Ваш, тон соответствовал проблеме


В приличном обществе грузчиков вам бы порекомендовали учить жену щи варить. На своём же месте я имею полное право возмущаться тупорылым поведением индусомакак, ломающих мой код. По-моему, человеческие форумы (типа RSDN, SQL.ru и т.п.) для этого и существуют — обсуждать проблемы с соотв. эмоциональной составляющей. А сухую документацию я и в MSDN прочту.
Спасибо за наводку с ServicePointManager — ею и стоило ограничиться. Ну и так, для полноты картины — Я ПРО***АЛ ЧЕТЫРЕ ЧАСА своего времени на ковыряние в SSL, проб разных классов и т.п. вплоть до ручной организации SSL-соединения. Я думаю, я имею право повозмущаться беспардонным поведением идиотов — за эти же 4 часа у меня б была уже написана полная программа.

Итак, для тех счастливчиков, что уже получили граблями от breaking changes в .NET 4.7.1, лекарство — пластырь! Пишете эту строчку в любом месте старт-кода и вуаля — работает!

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
Re: HttpClient - опять мелкомягким неймётся!
От: VladCore  
Дата: 21.04.19 01:33
Оценка:
Здравствуйте, Kolesiki, Вы писали:

TLS протокол обновислся давно, хотя как смотреть. По дефолту раньше был старый. Какой сейчас по дефолту хз.
Выставить явно версию TLS пробовал?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.