Скачать MetaTrader 5

Скрипты: WININET_TEST

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Подключи хранилище исходного кода MQL5 Storage. Это бесплатно!
Automated-Trading
Админ
99094
Automated-Trading 2010.02.24 18:01 

WININET_TEST:

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

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

Автор: MetaQuotes

Aleksey Sergan
23718
Aleksey Sergan 2010.02.24 18:41  

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

o_o
Модератор
23690
o_o 2010.02.24 20:17  
gdtt:

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

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


MetaQuotes
Админ
24944
Renat Fatkhullin 2010.02.24 21:08  
gdtt:

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

Перед /GET запросом послать /HEAD
kombat
3276
kombat 2010.02.24 21:26  
sergeev:

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


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


o_o
Модератор
23690
o_o 2010.02.24 23:09  

я только за! очень пользительная будет статья.
Quantum
173
Quantum 2010.02.25 12:14  
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
173
Quantum 2010.02.25 13:52  

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


Evgeny Potapov
1632
Evgeny Potapov 2014.07.27 16:53  

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

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

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

Yury Reshetov
13458
Yury Reshetov 2014.07.27 19:04  
Eugene1:

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

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

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

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

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