Удаленное управление советником (терминалом) - страница 2

 

Сделал еще давно как раз MQL+PHP+MySQL = воркает выглядит так :

 
#import "wininet.dll"
int InternetAttemptConnect (int x);
  int InternetOpenA(string sAgent, int lAccessType, 
                    string sProxyName = "", string sProxyBypass = "", 
                    int lFlags = 0);
  int InternetOpenUrlA(int hInternetSession, string sUrl, 
                       string sHeaders = "", int lHeadersLength = 0,
                       int lFlags = 0, int lContext = 0);
          
  int InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead, 
                       int& lNumberOfBytesRead[]);
  int InternetCloseHandle(int hInet);
#import
//+----------------------------------------------------------------------------------------------------------+
//| Функция получения WEB страницы                                                                           |
//+----------------------------------------------------------------------------------------------------------+
string GetURL(string url)
{
   int rv = InternetAttemptConnect(0);
   if(rv != 0)
     {
       Alert("Ошибка при вызове InternetAttemptConnect()");
       return(0);
     }

   int hInternetSession = InternetOpenA("Microsoft Internet Explorer", 0, "", "", 0);
   if(hInternetSession <= 0)
     {
       Alert("Ошибка при вызове InternetOpenA()");
       return(0);         
     }

   int hURL = InternetOpenUrlA(hInternetSession, url, "", 0, 0, 0);
   if(hURL <= 0)
    {
       fComment("Ошибка получения данных с узла!",true);
       InternetCloseHandle(hInternetSession);
       return(0);         
     } 
          
   int cBuffer[256];
   int dwBytesRead[1]; 
   string TXT = "";
   while(!IsStopped())
     {
       bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
       if(dwBytesRead[0] == 0)
           break;
       string text = "";   
       for(int i = 0; i < 256; i++)
         {
              text = text + CharToStr(cBuffer[i] & 0x000000FF);
              if(StringLen(text) == dwBytesRead[0])
                  break;
              text = text + CharToStr(cBuffer[i] >> 8 & 0x000000FF);
              if(StringLen(text) == dwBytesRead[0])
                  break;
           text = text + CharToStr(cBuffer[i] >> 16 & 0x000000FF);
           if(StringLen(text) == dwBytesRead[0])
               break;
           text = text + CharToStr(cBuffer[i] >> 24 & 0x000000FF);
         }
       TXT = TXT + text;
     }
     InternetCloseHandle(hInternetSession);
     return(TXT);
}
//+----------------------------------------------------------------------------------------------------------+
//| Конец Функции получения WEB страницы                                                                     |
//+----------------------------------------------------------------------------------------------------------+

Вызываем так

string TXT=GetURL("http://www.forexsignal.ru/setcc.php?log56="+LoginForexSignal+"&pass89="+PasswordForexSignal);
а потом StringFind ну там разберетесь
 

А вот тоже самое тока по фтп для немцев делал:

 

Сервер свой или где-то... там...?

У меня тож в планах АРМ на базе базы данных (мускулЪ) стоит,

правда на домашнем, публикация возможна, но "по плану", и без подобных сервисов.

В основном: обмен меж терминалами, разного рода инфа, статистика и бух.учёт... ;)))

*

Ежли расковыряю возможности sqlite, то и его запрягу.

 
Да! красиво реализовано... респектище!!!
 
SK. писал (а):

Есть необходимость обращаться за данными на удалённый сервер. Как бы это сделать средствами MQL?

имеется ввиду из советника MQL4 - читать с удаленного сервера какие либо данные ?

как вариант данные разумно хранить упорядоченно - для этих целей подходят сервера SQL

а читать из MQL4 и писать прямо из базы - в том числе из удаленной можно

есть реализации на MYSQL тут пробегали - скоро выйдет статья как можно увязать MT4 с MS SQL

на ее базе легко сделать чтение запись в любой другой SQL сервер

ну или просто реализовать... что то свое

 

Сервер хостинговый. обычный PHP+MySQL

Ну и для болшей надежности VPS сервачок выглядит так:

т.е. в итоге все крутиться у провайдеров они отвечают за надежность канала бесперебойность тока и т.д.

 
//+----------------------------------------------------------------------------------------------------------+
//| Проверка подписки на signals.trust-investonline.com                                                      |
//+----------------------------------------------------------------------------------------------------------+
bool CheckSignalsMy()
{
  fComment("Соединение с узлом Signals.Trust-InvestOnline.com ...",true);

   if(!IsDllsAllowed())
     {
       Alert("Необходимо в настройках разрешить использование DLL");
       return(0);
     }
   int rv = InternetAttemptConnect(0);
   if(rv != 0)
     {
       Alert("Ошибка при вызове InternetAttemptConnect()");
       return(0);
     }
     fComment("Соединение с узлом прошло успешно!",true);
   
  fComment("Запрос на Signals.Trust-InvestOnline.com ...",true);
  fComment("Проверка подписки на Signals.Trust-InvestOnline.com ...",true);
   int hInternetSession = InternetOpenA("Microsoft Internet Explorer", 
                                        0, "", "", 0);
   if(hInternetSession <= 0)
     {
       Alert("Ошибка при вызове InternetOpenA()");
       return(0);         
     }

   int hURL = InternetOpenUrlA(hInternetSession, 
              "http://signals.trust-investonline.com/answer.php?login="+LoginTrustInvest+"&pass="+PasswordTrustInvest, "", 0, 0, 0);
   if(hURL <= 0)
    {
       fComment("Ошибка получения данных с узла!",true);
       fComment("Перезапуск системы!",true);

       InternetCloseHandle(hInternetSession);
       init();

       return(false);         
     } 
   //Sleep(3000);       
   int cBuffer[256];
   int dwBytesRead[1]; 
   string TXT = "";
   while(!IsStopped())
     {
       bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
       if(dwBytesRead[0] == 0)
           break;
       string text = "";   
       for(int i = 0; i < 256; i++)
         {
              text = text + CharToStr(cBuffer[i] & 0x000000FF);
              if(StringLen(text) == dwBytesRead[0])
                  break;
              text = text + CharToStr(cBuffer[i] >> 8 & 0x000000FF);
              if(StringLen(text) == dwBytesRead[0])
                  break;
           text = text + CharToStr(cBuffer[i] >> 16 & 0x000000FF);
           if(StringLen(text) == dwBytesRead[0])
               break;
           text = text + CharToStr(cBuffer[i] >> 24 & 0x000000FF);
         }
       TXT = TXT + text;
       //Sleep(500);

     }
   
  
//   fComment("Здравствуйте, Иванов Иван Иванович, Вы идентифицированы на Signals.Trust-InvestOnline.com!", true);
    if (TXT!="Нет пользователя с таким именем!!!")
    fComment("Здравствуйте, "+StringSubstr(TXT,StringLen(LoginForexSignal),StringFind(TXT,"<br>",0)-StringLen(LoginForexSignal)),true);
    if (TXT=="Нет пользователя с таким именем!!!")
    {
    
    fComment("Здравствуйте, "+TXT,true);
    fComment("Проверьте имя пользователя и/или пароль!!!");
    Work = false; 
    InternetCloseHandle(hInternetSession);

    return(false);
    }
    if (TXT!="Нет пользователя с таким именем!!!")
    fComment("Вы идентифицированы на Signals.Trust-InvestOnline.com!", true);
   
   if (StrToTime(StringSubstr(TXT,StringLen(TXT)-10,10)) < TimeCurrent( ) )
   {
    fComment("Подписка неактивна! Окончена "+StringSubstr(TXT,StringLen(TXT)-10,10)+"!!!", true);
    fComment("Необходимо продлить подписку!!!");
    InternetCloseHandle(hInternetSession);
       Work = false; 
       ObjectsDeleteAll();
       WindowRedraw();
       InternetCloseHandle(hInternetSession);

       return(false);  
  
   }
   fComment("Подписка активна! Дата окончания : "+StringSubstr(TXT,StringLen(TXT)-10,2)+"."+StringSubstr(TXT,StringLen(TXT)-7,2)+"."+StringSubstr(TXT,StringLen(TXT)-4,4), true);
   InternetCloseHandle(hInternetSession);
        Work = true;   
        //LastFutureSignal="";
        return(true);
} 
//+----------------------------------------------------------------------------------------------------------+
//| Конец проверки подписки на signals.trust-investonline.com                                                |
//+----------------------------------------------------------------------------------------------------------+
 
Нада статейку тут катануть чтоль в выходные на тему построения удаленного управления попробую тут говорят за статьи деньги дают :-)
 

Для удаленного управления я использую teamViewer http://www.teamviewer.com/index.aspx/ Очень удобно, просто и надежно

Причина обращения: