Как заставить ZP следовать инструкциям System.Net.ServicePointManager

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
Никак не получается подружить Зенно с инструкциями System.Net.ServicePointManager
Как следствие - получаются ошибки - либо вообще не получается создать соединение, либо сервисы блокируют запросы, как описал здесь: 403, 1020

Вопрос состоит в том, как заставить ZP подчиниться инструкциям:

C#:
System.Net.ServicePointManager.Expect100Continue = true;
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
Пробовал "упаковать" в DLL, пробовал напрямую добавить в код Зенно, пробовал с Зенно методами GET/POST старыми, новыми.
В итоге - пришел к выводу, что Зенно упорно игнорирует их (или как-то переопределяет по-своему).

Неужели единственный возможный вариант - это держать запущенную EXE и налаживать взаимодействие Зенно с EXE?
 

7make

Client
Регистрация
25.06.2011
Сообщения
1 547
Благодарностей
1 310
Баллы
113

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с 7make какие-либо сделки.

все это патчить через реестр нужно скорее всего, ибо параметры системы для сетевого стека


или так пробуй

C#:
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;


using (var webClient = new WebClient())
{
    ....
}
 
Последнее редактирование:
  • Спасибо
Реакции: BAZAg

RoyalBank

Client
Регистрация
07.09.2015
Сообщения
557
Благодарностей
547
Баллы
93
@BAZAg, Правильно ли я понял, что сам ZP отправляет запрос, через свои настроенные костыли, без разницы используешь ты условный RestSharp, чистый .Net, или те два метода, что разрабы предлагают из коробки? И никак от этого не избавиться, только создавая свою EXE в visualstudio?
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
все это патчить через реестр нужно скорее всего, ибо параметры системы для сетевого стека

https://docs.microsoft.com/en-us/mem/configmgr/core/plan-design/security/enable-tls-1-2-client
https://stackoverflow.com/questions/28286086/default-securityprotocol-in-net-4-5

или так пробуй

C#:
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;


using (var webClient = new WebClient())
{
    ....
}
https://support.microsoft.com/ru-ru/topic/описание-новой-функции-защиты-от-повышенной-нагрузки-на-память-для-tcp-стека-749c1746-ba10-ec18-d61a-bbdabbc403fc
Нет, игнорирует настройку - разве что действительно как-то реестр править или ещё чего....

84366



@BAZAg, Правильно ли я понял, что сам ZP отправляет запрос, через свои настроенные костыли, без разницы используешь ты условный RestSharp, чистый .Net, или те два метода, что разрабы предлагают из коробки? И никак от этого не избавиться, только создавая свою EXE в visualstudio?
Да, когда exe работает отдельно (даже не запускается через зенно) - всё ок.
Как только запускаю его через Зенно или подключаю DLL вместо EXE к Зенно - получаю проблему.
P.S. Не важно какие методы я использую в Зенно - Зенновские, Шарповские, Рест и тп - один фиг игнор Зенно = 403-1020
Как будто Зенно как-то по-особому обрабатывает потоки, которые были запущены... ХЗ что именно происходит там.

В попытках решения всего этого написал что-то вроде клиент-сервер через базу. И проблема банальная - если я запускаю например 100 потоков в Зенно, и столько же в EXE - и общаются они как-то например посредством MySQL - то либо вся процедура запроса больше 30 секунд, что меня не устраивает, либо проблема с сетью (слишком нагружается со всех сторон так как накладные расходы 4 запроса вместо 1-го), либо проблема с CPU в месте где лежит база (так как данные в запросе могут быть большими, и куки также что-то весят и тп). Но, это как бы не касается того, что Зенно игнорирует мои инструкции для запросов - как обходить свои ограничения относительно своих написанных костылей - это нужно другую тему создавать.... А здесь я пытаюсь повторно обратить внимание на проблему 403-1020

Короче говоря - 3-4 месяца танцую с бубном и ничего дельного не придумал....
 
Последнее редактирование:
  • Спасибо
Реакции: Metrix

Meteorburn

Client
Регистрация
23.05.2016
Сообщения
1 448
Благодарностей
564
Баллы
113
Короче говоря - 3-4 месяца танцую с бубном и ничего дельного не придумал....
Напиши свой класс с подключаемой библиотекой, например Leaf.xNet ну или через WebClient, где укажешь параметры SSL.

C#:
// SSL
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.DefaultConnectionLimit = 9999;
 
Последнее редактирование:
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
Напиши свой класс с подключаемой библиотекой, например Leaf.xNet ну или через WebClient, где укажешь параметры SSL.

C#:
// SSL
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;
ServicePointManager.DefaultConnectionLimit = 9999;
Пробовал (писал свой класс, втыкал туда настройки, собирал в dll, подключал dll к зенно, дёргал один метод get через зенно) = результат идентичен.
 

Meteorburn

Client
Регистрация
23.05.2016
Сообщения
1 448
Благодарностей
564
Баллы
113
Пробовал (писал свой класс, втыкал туда настройки, собирал в dll, подключал dll к зенно, дёргал один метод get через зенно) = результат идентичен.
Та должно работать.
Может всё-таки где-то в другом проблема? Не доглядел что-то.
 
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
Та должно работать.
Может всё-таки где-то в другом проблема? Не доглядел что-то.
Так и я о том же - должно работать (не должно переопределяться никак самим Зенно).
А в реальности - не работает.
Целевую ссылку отправил в личку - может у Вас опыта больше, сможете отправить обычный GET через Зенно с использованием любой библиотеки чтобы в результате получить что либо кроме 403-1020.
Без Зенно это решается любой библиотекой даже банальным System.Net....

Но, когда вся логика построена на Зенно, не удобно отправлять запросы отдельно через другие решения....
 
  • Спасибо
Реакции: Meteorburn

Meteorburn

Client
Регистрация
23.05.2016
Сообщения
1 448
Благодарностей
564
Баллы
113
Так и я о том же - должно работать (не должно переопределяться никак самим Зенно).
А в реальности - не работает.
Целевую ссылку отправил в личку - может у Вас опыта больше, сможете отправить обычный GET через Зенно с использованием любой библиотеки чтобы в результате получить что либо кроме 403-1020.
Без Зенно это решается любой библиотекой даже банальным System.Net....

Но, когда вся логика построена на Зенно, не удобно отправлять запросы отдельно через другие решения....
Хорошо, гляну. Интересно даже.
 
  • Спасибо
Реакции: BAZAg

Geograph

Client
Регистрация
16.02.2014
Сообщения
209
Благодарностей
113
Баллы
43
Подожди 403-ошибка это же не про SSL?
Когда SSL не может подключиться из-за проблем с сертификатом оно выдает ошибку про сертификат.

А чтобы html-код страницы посмотреть при ошибках 403, 404 надо в catch() перехватывать страницу

C#:
using (var client = new System.Net.WebClient())
{
    var responseText = "";
    try
    {
        responseText = client.DownloadString(url);
    }
    catch (System.Net.WebException exception)
    {      
        var responseStream = exception.Response?.GetResponseStream();
        if (responseStream != null)
        {
            using (var reader = new StreamReader(responseStream))
            {
                responseText = reader.ReadToEnd();
            }
        }      
    }
    return responseText;
}
 
Последнее редактирование:
  • Спасибо
Реакции: BAZAg

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 761
Благодарностей
2 401
Баллы
113
Подожди 403-ошибка это же не про SSL?
Когда SSL не может подключиться из-за проблем с сертификатом оно выдает ошибку про сертификат.
Сайт с которым я работаю отлавливает проблему с сертификатом (видимо) и возвращает 403-1020.
Иначе - я тогда вообще не могу понять почему без Зенно работает, с Зенно - не работает.
Отличие кода только в двух строках которые обозначены в этой теме.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
4 месяца решения проблемы - это конечно большое упорство

У меня была подобная проблема с необходимостью установки сертификата и правильным протоколом. Решил так:

1) В статическом конструкторе класса:
C#:
ServicePointManager.ServerCertificateValidationCallback += (obj, certificate, chain, errors) => true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
2) Для использования запросов взял класс HttpClient и подсунул ему кастомный handler (не мой):
C#:
private WebRequestHandler handler = new WebRequestHandler()
{
    AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate,
    UseCookies = true,
    UseProxy = true,
    ClientCertificateOptions = ClientCertificateOption.Manual
};
Handler можно найти в сборке System.Net.Http.WebRequest

3) Используем так:
C#:
bytes[] certBytes = File.ReadAllBytes("твой путь");
handler.ClientCertificates.Add(new X509Certificate(certBytes));
HttpClient hClient = new HttpClient(handler);
В зеннопостер работало с кастомным сертификатом.
Делал давно, так что сейчас можно этот сертификат сразу в библиотеку закинуть и сделать статическое поле с данными о сертификате, чтобы не читать его каждый раз из файла. Но опыт приходит с годами, поэтому можно чуть оптимизировать мой код
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 371
Благодарностей
3 295
Баллы
113
В постере переопределяется это, при запуске:
C#:
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
но вроде как не должно мешать.

Нужен полный код с проблемой.
 
  • Спасибо
Реакции: BAZAg

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)