Проблема WebRequest на Windows Server 2019

 

Появилась проблема на MQL5 с WebRequest на Windows Server 2019 - функция возвращает обрезанный ответ при очень огромных текстах, хотя на Windows 10 и Windows Server 2012 R2 работает идеально. Вот сама функция 

string rweb(string url, int msc)
  {
   char data[],res_data[];
   string res_headers=NULL;
   int r=WebRequest("POST", url, NULL,msc, data, res_data, res_headers);
   if(r>=0)
     {
      return(CharArrayToString(res_data,0,-1,65001));
     }
   return("");
  }
 
У меня перестал работать WebRequest на Windows 10. Проблема появилась в пределах двух последних обновлений MT5. Сервер Бинанс возвращает ошибку 404 на GET-запросы. Проблема появляется после перекомпиляции на последнем релизе Metaeditor работавших до этого скриптов. Но в единичных случаях запросы прорываются. Тоже самое ПО на питоне работает без проблем и вставка в строку браузера тоже.
 
Кто-нибудь из жалующихся может предоставить тестовый скрипт целиком, а не какие-то выжимки и общие слова?
 
Stanislav Korotky #:
Кто-нибудь из жалующихся может предоставить тестовый скрипт целиком, а не какие-то выжимки и общие слова?
Да пожалуйста! А у вас что, работает? У меня тоже работало до перекомпиляции. Вот скрипт запроса времени с бинанса:
void OnStart()
  {
// URL для получения серверного времени от Binance
   string url = "https://data-api.binance.vision/api/v3/time";
   uchar result[];

   int servMess = ReqwestWrite(url,result,"Серверное время");
   int size = ArraySize(result);

   /*=== извлечение serverTime из uchar в string
         Ответ имеет формат: {"serverTime":1757595699443}*/
   if(servMess == 200 && size > 0)
     {
      string strResponse = "";
      bool writeOn = false;

      for(int i = 0;i < size;i++)
        {
         if(result[i] == '}')
            writeOn = false;
         if(writeOn == true)
            strResponse += CharToString(result[i]);
         if(result[i] == ':')
            writeOn = true;
        }//i

      //Print(__FILE__," ",__FUNCTION__," Получено время сервера Бинанс=",strResponse);


      // Убираем возможные пробелы
      StringTrimRight(strResponse);
      StringTrimLeft(strResponse);
      // Преобразуем строку в число (время в миллисекундах)
      long time_ms = (long)StringToInteger(strResponse);

      // Получаем время в секундах
      long time_sec = (long) MathFloor((double)time_ms / 1000);
      Print("Получено время Binance: ",TimeToString((datetime)time_sec));
     }//size > 0
  }//OnStart()
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Функция отправки   WebRequest                                    |
//+------------------------------------------------------------------+
int ReqwestWrite(string urlMess,uchar &responArr[],string sendName)
  {
// Подготавливаем параметры для WebRequest
   string headers = "";
   char data[];
   string result_headers;
   int timeout = 10000; // 10 секунд

// Выполняем GET запрос
   int res_code = WebRequest("GET", urlMess, headers, timeout,data, responArr,result_headers);

// Проверяем результат запроса
   if(res_code > -1)
     {
      if(res_code > 400)
        {
         string mess = "Бинанс отверг запрос";
         Print(__FUNCTION__," ",sendName," ",mess," ", res_code);
         if(res_code > 499)
            mess = "Ошибка на стороне Бинанс";
        }//res_code>=400
     }//res_code > -1
   else
     {
      string mess = "Неверно сформирован запрос WebRequest для " + sendName;
      Print(__FILE__," ",__FUNCTION__," ",mess);
     }//res_code!>-1
   return res_code;
  }//ReqwestWrite()
 
Good Beer #:
А у вас что, работает?

В Windows 10 - работает.

На всякий случай, попробуйте заменить на testnet.binance.vision

 
Good Beer #:
Да пожалуйста! А у вас что, работает? У меня тоже работало до перекомпиляции. Вот скрипт запроса времени с бинанса:
2025.10.25 16:14:15.572    498054 (EURUSD,H1)    Получено время Binance: 2025.10.25 14:13
2025.10.25 16:05:06.602    Terminal    ICMarkets - MetaTrader 5 x64 build 5370 started for International Capital Markets Pty Ltd.
2025.10.25 16:05:06.602    Terminal    Windows Server 2019 build 17763 on KVM, 4 x AMD EPYC, AVX2, 1 / 3 Gb memory, 18 / 99 Gb disk, RDP, UAC, admin, GMT+1
 
Alain Verleyen #:
2025.10.25 16:14:15.572    498054 (EURUSD,H1)    Получено время Binance: 2025.10.25 14:13
2025.10.25 16:05:06.602    Terminal    ICMarkets - MetaTrader 5 x64 build 5370 started for International Capital Markets Pty Ltd.
2025.10.25 16:05:06.602    Terminal    Windows Server 2019 build 17763 on KVM, 4 x AMD EPYC, AVX2, 1 / 3 Gb memory, 18 / 99 Gb disk, RDP, UAC, admin, GMT+1
Я запускал на 2-х разных компьютерах. Пробовал через VPN. Результат одинаковый. Может быть от провайдера зависит?
 
Good Beer #:
Я запускал на 2-х разных компьютерах. Пробовал через VPN. Результат одинаковый. Может быть от провайдера зависит?

Очень может быть. У меня кабель МТС, половина сайтов не открывается (биржи - ок). Открываю через прокси-сервер на VPS в Москве. Там проходит всё, включая Ютуб.
В новом жилье подключусь к другому провайдеру.


PS: хотя, я тут подумал, если бы была блокировка, была бы не ошибка сервера 404, а ошибка WebRequest 1001 или 1003.
 
Edgar Akhmadeev #:

Очень может быть. У меня кабель МТС, половина сайтов не открывается (биржи - ок). Открываю через прокси-сервер на VPS в Москве. Там проходит всё, включая Ютуб.
В новом жилье подключусь к другому провайдеру.


PS: хотя, я тут подумал, если бы была блокировка, была бы не ошибка сервера 404, а ошибка WebRequest 1001 или 1003.
Ошибку 404 обычно сопровождает какой-то контент и словесное описание - оно есть?
 
Stanislav Korotky #:
Ошибку 404 обычно сопровождает какой-то контент и словесное описание - оно есть?

Не понял. Если Вы про проблему с WebRequest и Binance, не я сообщал о 404. У меня ок.

 
Stanislav Korotky #:
Ошибку 404 обычно сопровождает какой-то контент и словесное описание - оно есть?
Не сопровождает. В расшифровке Бинанса это означает "Неверно сформированный запрос". Я пробовал поймать тело запроса и ответа специальной программой. Там что то говорится про ошибку сертефиката. Попробую переделать скрипт под другого поставщика.