Скачать MetaTrader 5

Скрипты: WININET_TEST

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Automated-Trading
Админ
106505
Automated-Trading  

WININET_TEST:

Простой пример использования функций библиотеки wininet.dll для загрузки страниц или файлов из Internet.

Для работы установите опцию "Разрешить импорт DLL" и запустите скрипт на любом графике.

Автор: MetaQuotes

Aleksey Sergan
29354
Aleksey Sergan  

Подскажите, есть ли возможность узнать длину файла до его чтения? Это для того, чтобы можно было сделать оценку процентов загруженных данных в случае больших объемов, медленных скоростей.

o_o
Модератор
24293
o_o  
gdtt:

Подскажите, есть ли возможность узнать длину файла до его чтения? Это для того, чтобы можно было сделать оценку процентов загруженных данных в случае больших объемов, медленных скоростей.

думаю что можно. и в описании на msdn по wininet.dll это вы найдёте.


MetaQuotes
Админ
25397
Renat Fatkhullin  
gdtt:

Подскажите, есть ли возможность узнать длину файла до его чтения? Это для того, чтобы можно было сделать оценку процентов загруженных данных в случае больших объемов, медленных скоростей.

Перед /GET запросом послать /HEAD
kombat
3278
kombat  
sergeev:

думаю что можно. и в описании на msdn по wininet.dll это вы найдёте.


Предполагаю будет хорошей темой для статьи с полным раскрытием применения wininet.dll


o_o
Модератор
24293
o_o  

я только за! очень пользительная будет статья.
Quantum
174
Quantum  
gdtt:

Подскажите, есть ли возможность узнать длину файла до его чтения? Это для того, чтобы можно было сделать оценку процентов загруженных данных в случае больших объемов, медленных скоростей.

возможность есть, если сервер сообщает длину содержимого.

Для получения информации о запросе можно использовать функцию HttpQueryInfo из wininet.dll - эта функция возвращает требуемую информацию в указанный массив в строковом виде.

Пример использования:

в секции #import добавьте описание:

int HttpQueryInfoW(int hRequest,int dwInfoLevel,uchar &lpvBuffer[],int &lpdwBufferLength,int &lpdwIndex);

также добавьте

#define HTTP_QUERY_CONTENT_LENGTH 5

затем в коде после вызова InternetOpenUrlW и получения hURL нужно добавить код:

   int BufLen=2048;
   int ind=0;
   uchar buf0[2048];
   string s="";
   int ContentSize_HttpQueryInfoW=0;
   int iRes;
   
   iRes=HttpQueryInfoW(hURL,HTTP_QUERY_CONTENT_LENGTH,buf0,BufLen,ind);
   if(iRes<=0)
     {
      Print("Error in call of HttpQueryInfoW()");
     }
   else
     {
      s="";
      for(int k=0;k<BufLen;k++) { s=s+CharToString(buf0[k]);}
      Print("HTTP_QUERY_CONTENT_LENGTH:",s);
      if (StringLen(s)>0) ContentSize_HttpQueryInfoW=StringToInteger(s);
      Alert("Размер содержимого=",ContentSize_HttpQueryInfoW);
     }     

в нашем тестовом примере с yandex.ru получается "Размер содержимого= 44649", что соответствует размеру загруженного файла.  т.е. до начала загрузки (InternetReadFile) мы узнали длину содержимого.

Quantum
174
Quantum  

Добавил эту возможность в текущую версию скрипта.


Evgeny Potapov
1678
Evgeny Potapov  

Замечательный код!

Но, раз уж вы разобрались с этими функциями, то не могли бы вы подсказать, как вместо записи в файл, получить просто функцию возвращающую строку.

А то что-то я с этими массивами пока никак не разберусь... 

Yury Reshetov
13486
Yury Reshetov  
Eugene1:

Замечательный код!

Но, раз уж вы разобрались с этими функциями, то не могли бы вы подсказать, как вместо записи в файл, получить просто функцию возвращающую строку.

А то что-то я с этими массивами пока никак не разберусь... 

Вот здесь скрипт запихивает полученные данные в строку с идентификатором s:

for(int k=0;k<BufLen;k++) { s=s+CharToString(buf0[k]);}
Dmitry Fedoseev
46928
Dmitry Fedoseev  
Это уже не актуально. Появилась стандартная функция webrequest
Документация по MQL5: Общие функции / WebRequest
Документация по MQL5: Общие функции / WebRequest
  • www.mql5.com
Общие функции / WebRequest - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий