Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Нет времени торговать самому? Подпишись на сигнал!
Grigoriy Malychenko
3467
Grigoriy Malychenko 2013.08.01 08:33 

Здравствуйте.

Столкнулся с такой проблемой, не могу никак понять принцип действия. Мне нужно из скрипта отправить на сайт get-запрос. В самом запросе всего три переменных передается, номер счета, баланс и средства.

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

Приведите простейший пример, того как это реализуется с помощью библиотеки wininet.dll

Рустам
3597
Рустам 2013.08.01 08:38  
какой смысл отправлять запрос, если вас не интересует ответ ?
Grigoriy Malychenko
3467
Grigoriy Malychenko 2013.08.01 09:09  

Мне нужно отправлять данные на сайт, а там уже php-скрипт занесет их в базу. Это для мониторинга счетов.

ktest0
631
ktest0 2013.08.01 09:39  
WebProger:

Мне нужно отправлять данные на сайт, а там уже php-скрипт занесет их в базу. Это для мониторинга счетов.


))) Я тоже так мониторинг реализовал + еще некоторые плюшки. Удобно очень. Раньше на почту сообщения отправлялись, но не то это было...

Обновляются данные каждую минуту, а если данные на сервер три минуты не приходят - алерт в виде SMS от сервера...

Рустам
3597
Рустам 2013.08.01 09:47  

То есть, что произойдет на той стороне, вас совершенно не интересует. Ни ответ сервера, ни коды возврата (ошибок)... Главное запулить данные по открытому каналу...

Прям как сисадмин на стрельбище.

ЗЫ. пардон, только обратил внимание на ник. Значит таки сисадмин.

Grigoriy Malychenko
3467
Grigoriy Malychenko 2013.08.01 10:09  

Не сомневайтесь, пули попадут в цель, только стрелять пока нечем )))

Рустам
3597
Рустам 2013.08.01 10:14  
ну как собрать гет запрос я надеюсь вы знаете с таким ником то ?
Рустам
3597
Рустам 2013.08.01 10:15  
//+------------------------------------------------------------------+
//|                                                 InetFunction.mq4 |
//|                                 Copyright © 2011, XrustSolution. |
//|                                           mail: xrustx@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, XrustSolution."
#property link      "mail: xrustx@gmail.com"
//+------------------------------------------------------------------+
//|     Defines                                                        |
//+------------------------------------------------------------------+
#define HTTP_QUERY_CONTENT_LENGTH 0x00000005
#define HTTP_QUERY_FLAG_NUMBER    0x20000000
//----
#define INTERNET_OPEN_TYPE_DIRECT       0
#define INTERNET_OPEN_TYPE_PRECONFIG    0x00000000   // use registry configuration
#define INTERNET_FLAG_RELOAD            0x80000000
#define INTERNET_FLAG_NO_CACHE_WRITE    0x04000000
#define INTERNET_FLAG_PRAGMA_NOCACHE    0x00000100
//----
#define AGENT "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)"
//+------------------------------------------------------------------+
//|     Export Function from WINAPI                                    |
//+------------------------------------------------------------------+
#import "wininet.dll"
        int InternetAttemptConnect (int x);
        int InternetOpenA                                       ( string sAgent, int lAccessType, string sProxyName, string sProxyBypass, int lFlags );
        int InternetOpenUrlA                            ( int hInternetSession, string sUrl, string sHeaders, int lHeadersLength, int lFlags, int lContext );
        int InternetReadFile                            ( int hFile, int& lpvBuffer[], int lNumBytesToRead, int& lNumberOfBytesRead[] );
        int InternetCloseHandle                 ( int hInet );
        int InternetQueryDataAvailable  ( int hFile, int& lpdwNumberOfBytesAvailable[], int dwFlags, int dwContext );
        int HttpQueryInfoA                                      ( int hRequest, int dwInfoLevel, int& lpvBuffer[], int& lpdwBufferLength[], int& lpdwReserved[] );
#import
//+------------------------------------------------------------------+
//|                                 Function  :                   InetToString |
//|                                 Copyright © 2010, XrustSolution. |
//|                                           mail: xrustx@gmail.com |
//+------------------------------------------------------------------+
int InetToString(string fUrl, string &out){Print("URL :",fUrl);Print("IN DATA",out);
   if(!IsDllsAllowed()){
     Alert("Must be configured to allow the use of DLL");
     return(1001);
   }
   int rv = InternetAttemptConnect(0);
   if(rv != 0){
     Print("Error when calling InternetAttemptConnect ()");
     return(1002);
   }
   int hSession = InternetOpenA(AGENT, INTERNET_OPEN_TYPE_DIRECT, "0", "0", 0);
   if(hSession <= 0){
     Print("Error when calling InternetOpenA()");
     return(1003);         
   }    
        int hReq = InternetOpenUrlA(hSession, fUrl, "0", 0,
                                                                        INTERNET_FLAG_NO_CACHE_WRITE |
                                                                        INTERNET_FLAG_PRAGMA_NOCACHE |
                                                                        INTERNET_FLAG_RELOAD, 0
                                                                        );
   if(hReq <= 0){
     Print("Error when calling InternetOpenUrlA()");
     InternetCloseHandle(hSession);
     return(1004);
   }
   int cBuffer[256];
   ArrayInitialize(cBuffer,0);
   int dwBytesRead[1]; 
   ArrayInitialize(dwBytesRead,0);
   string TXT = "";
   while(!IsStopped()){
        bool bResult = InternetReadFile(hReq, 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);
                if(StringLen(text) == dwBytesRead[0])break;
                }
        TXT = TXT + text;
        Sleep(1);
        }
   if(StringFind(TXT,"<html>",0)>=0||StringFind(TXT,"<HTML>",0)>=0||StringFind(TXT,"<title>",0)>=0||StringFind(TXT,"<head>",0)>=0){
        if(StringFind(TXT,">404",0)>=0){return(404);}
   }  
   out = TXT;  
        InternetCloseHandle(hReq);
        InternetCloseHandle(hSession);  
        //Print("ServerAnswer:",out);                                                                           
        return(0);         
}
Grigoriy Malychenko
3467
Grigoriy Malychenko 2013.08.01 10:57  

Для сброса ссылок в файл, делал так:

string Update = StringConcatenate(Site,"update.php?acc=",Number,"&equity=",Equity,"&balance=",Balance); 

Я могу передать в качестве fUrl в фугкцию InetToString(); строку с ссылкой на сайт, сразу с параметрами?

А вторая переменная string &out для чего?

Рустам
3597
Рустам 2013.08.01 11:06  
в нее получаете ответ серверного скрипта, а функция возвращает номер ошибки.
Grigoriy Malychenko
3467
Grigoriy Malychenko 2013.08.01 11:40  

В качестве второго параметра передаю сейчас пустую строку. Данные попали точно в цель.

Благодарю за помощь.

/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий