Görev: MQL5'te çevrimiçi görüntüleme ile günlük analizlerin uygulanması - sayfa 7

 
Bu işlevle çalışma örnekleri olan var mı, aksi takdirde bu konudaki kılavuz sessizdir!
 
IvanIvanov :
Bu işlevle çalışma örnekleri olan var mı, aksi takdirde bu konudaki kılavuz sessizdir!

ne kadar sessiz, her şey orada boyanmış.

beze kodunda burada da benzer şekilde WinInet ile çalışma örnekleri var, ayrıca çalışan, kanıtlanmış örnekler var.

 void OnStart ()
  {
   string cookie= NULL ,headers;
   char post[],result[];
   int res;
//--- для работы с сервером необходимо добавить URL "https://www.google.com/finance" 
//--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"):
   string google_url= "https://www.google.com/finance" ;
//--- обнуляем код последней ошибки
   ResetLastError ();
//--- загрузка html-страницы с Google Finance
   res=WebRequest( "GET" ,google_url,cookie, NULL , 50 ,post, 0 ,result,headers);
//--- проверка ошибок
   if (res==- 1 )
     {
       Print ( "Ошибка в WebRequest. Код ошибки  =" , GetLastError ());
       //--- возможно URL отсутствует в списке, выводим сообщение о необходимости его добавления
       MessageBox ( "Необходимо добавить адрес '" +google_url+ "' в список разрешенных URL во вкладке 'Советники'" , "Ошибка" , MB_ICONINFORMATION );
     }
   else
     {
       //--- успешная загрузка
       PrintFormat ( "Файл успешно загружен, Размер файла =%d байт." , ArraySize (result));
       //--- сохраняем данные в файл
       int filehandle= FileOpen ( "GoogleFinance.htm" , FILE_WRITE | FILE_BIN );
       //--- проверка ошибки
       if (filehandle!= INVALID_HANDLE )
        {
         //--- сохраняем содержимое массива result[] в файл
         FileWriteArray (filehandle,result, 0 , ArraySize (result));
         //--- закрываем файл
         FileClose (filehandle);
        }
       else Print ( "Ошибка в FileOpen. Код ошибки =" , GetLastError ());
     }
  }
 


 
sanyooooook :

ne kadar sessiz, her şey orada boyanmış.

Yani, hepsi değil. dedi Renat

Onunla her şeyi yapabilirsin...

Yardımda bir POST isteği örneği var mı? Veya bir dosya indirmek?

 
fyords :

Yani, hepsi değil. dedi Renat

Yardımda bir POST isteği örneği var mı? Veya bir dosya indirmek?

GET de orada yazılır, bu bir GET isteği anlamına gelir, eğer POST ise bir POST isteği (bir gönderi isteği ile daha fazla istek parametresi gönderilebilir).

sonuç değişkeni, bağlantıdakine yazılır:

 https://www.google.com/finance

daha sonra sonuç bir dosyaya yazılır, yazılacak dosya ikili olarak açılır.

Not: Kod tabanında WinInet ile örnekler arayın, burada aynı şey.

 
sanyooooook :

GET de orada yazılır, bu bir GET isteği anlamına gelir, eğer POST ise bir POST isteği (bir gönderi isteği ile daha fazla istek parametresi gönderilebilir).

sonuç değişkeni, bağlantıdakine yazılır:

daha sonra sonuç bir dosyaya yazılır, yazılacak dosya ikili olarak açılır.

Peki anladım, yardımda örnek yok.
Ayrıca, bir POST isteği ile metin olmayan verilerin yüklenmesi ilgi çekicidir.

İzlenen istekler, her zaman başlıkta iletilir

Content-Type: application/x-www-form-urlencoded

Bir resim yüklemek gerekli görünse de

Content-Type: multipart/form-data;
Content-Type: image/jpeg
 

Eskiden böyle yapardım ama ne güzel ne de resim için yapılmış:

 //+------------------------------------------------------------------+
//|                                                     HttpPOST.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link        "http://www.metaquotes.net"
#define INTERNET_FLAG_PRAGMA_NOCACHE                                             0x00000100    // не кешировать страницу
#define INTERNET_FLAG_KEEP_CONNECTION                                           0x00400000    // не разрывать соединение
#define INTERNET_FLAG_SECURE                                             0x00800000 
#define INTERNET_FLAG_RELOAD                                                                             0x80000000    // получать страницу с сервера при обращении к ней
#define INTERNET_OPEN_TYPE_PRECONFIG   0    // use registry configuration
#define INTERNET_FLAG_KEEP_CONNECTION   0x00400000    // use keep-alive semantics
#define INTERNET_SERVICE_HTTP   3

#import "wininet.dll"
         int InternetAttemptConnect( int x);
   int InternetOpenA( string sAgent, int lAccessType, string sProxyName= "" , string sProxyBypass= "" , int lFlags = 0 );
         int InternetConnectA( int hInternet, string lpszServerName, /*WORD*/ int nServerPort, string lpszUsername, string lpszPassword, int dwService, int dwFlags,   int dwContext);
   int HttpOpenRequestA( int hConnect, string lpszVerb, string lpszObjectName, string lpszVersion, string lpszReferer, string lplpszAcceptTypes, int dwFlags, int dwContext);
   int HttpSendRequestA( int hRequest, string lpszHeaders, int dwHeadersLength, int & lpOptional[], int dwOptionalLength);
   int InternetCloseHandle( int hInet);
//  int InternetReadFile(int hFile, int& sBuffer[], int lNumBytesToRead, int& lNumberOfBytesRead[]);
int InternetReadFile( int hFile, string sBuffer, int lNumBytesToRead, int & lNumberOfBytesRead[]);
#import
        
         string Host= "secure.indx.ru" ;
         string Path= "/api/v1/tradejson.asmx" ;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
         int h= FileOpen ( "text.txt" , FILE_BIN | FILE_READ ); if (h< 0 ) return ;
         FileSeek (h, 0 , SEEK_SET );       int size= MathFloor ( FileSize (h)/ 4 ); if ( FileSize (h)% 4 != 0 )size++;
         int data[], i= 0 ;         ArrayResize (data, size); // изменили размер
         while (! FileIsEnding (h)) { data[i]= FileReadInteger (h, LONG_VALUE); i++; }
         FileClose (h); // 
         // выводим прочитанный массив для проверки
         string st= "" ;
         for (i= 0 ; i<size; i++) 
        {
                st=st+CharToStr(data[i]& 255 ); st=st+CharToStr(data[i]>> 8 & 255 ); 
                st=st+CharToStr(data[i]>> 16 & 255 ); st=st+CharToStr(data[i]>> 24 & 255 ); 
        }
         Print ( "Размер файла: " +size* 4 + "  байт" );
         Print ( "Данные: " +st);
         int hInternetSession, hConnectHandle, hResourceHandle, result;
         if (InternetAttemptConnect( 0 )!= 0 ) { Print ( "error InternetAttemptConnect" ); return ( 0 ); }
        hInternetSession=InternetOpenA( "Microsoft Internet Explorer" ,  INTERNET_OPEN_TYPE_PRECONFIG, "" , "" , 0 ); 
         if (hInternetSession<= 0 ) { Print ( "error InternetOpenA()" ); return ( 0 ); }
        
        hConnectHandle=InternetConnectA(hInternetSession, Host, 80 , "" , "" , INTERNET_SERVICE_HTTP, 0 , 0 ); 
         if (hConnectHandle<= 0 ) { Print ( "error InternetConnect()" ); return ( 0 ); }
        
        hResourceHandle=HttpOpenRequestA(hConnectHandle, 
                                         "POST" , 
                                         Path, 
                                         "" , 
                                         "" , 
                                         "Accept: text/json\r\n" , 
                                         INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_RELOAD|INTERNET_FLAG_PRAGMA_NOCACHE, 
                                         0 ); 
         if (hResourceHandle<= 0 ) { Print ( "error HttpOpenRequest()" ); return ( 0 ); }
         Print (hResourceHandle);
         string Head= "Content-Type: application/x-www-form-urlencoded" ;
   int Len= StringLen (Head);
        result=HttpSendRequestA(hResourceHandle, Head, Len, data, size);
         Print (result);
         if (result<= 0 ) { Print ( "error HttpSendRequestA()" ); return ( 0 ); }
         //Print("Сука вот я дебил!!! )))");
   int      lReturn[]  = { 1 };
   string   sBuffer    = "" ;
   string strWebPage= "" ;
   int I= 0 ;
   while (! IsStopped ()) {
     if (InternetReadFile(hResourceHandle, sBuffer, 128 , lReturn) <= 0 || lReturn[ 0 ] == 0 ) {
     //Print(sBuffer);
       break ;
    }
    I++;
     Print (I);
    strWebPage = StringConcatenate (strWebPage, StringSubstr (sBuffer, 0 , lReturn[ 0 ]));
  }
     Print (strWebPage);
   InternetCloseHandle(hResourceHandle);
        InternetCloseHandle(hConnectHandle);
        InternetCloseHandle(hInternetSession);     
   return ( 0 );
  }
//+------------------------------------------------------------------+
 

Hayır, bir DLL ile her şeyi yapabilirsiniz.
Örnek için teşekkürler.

Normal araçlarla ilgileniyorum, WebRequest .

 
fyords :

Hayır, bir DLL ile her şeyi yapabilirsiniz.

Normal araçlarla ilgileniyorum, WebRequest.

WinInet kullanarak benzetme yaparak yapın, anladığım kadarıyla, başlığın doğruluğunda bir sorununuz var.
 
sanyooooook :
WinInet kullanarak benzeterek yapın, anladığım kadarıyla, başlığın doğruluğunda bir sorununuz var.
Hayır, sorun şu ki WebRequest kendi başlıklarını oluşturmaya izin vermiyor (belki de nasıl bilmiyorum).
 
nereye göndermeniz gerekiyor?