Apprendre à hacher des données dans mql4 - page 4

 
Reshetov:

En fait, dans les requêtes GET et POST, tout est transmis sous la forme : id=value, c'est-à-dire le nom du paramètre et la valeur entre deux signes égaux. En outre, tous les caractères qui ne sont pas des lettres et des chiffres latins sont codés avec % (code de caractère).

Il y a un problème, j'essaie de le résoudre, mais ça ne marche pas :

  if (!HttpSendRequestA(hReq, NULL, 0, request, len))
  {
    return (false);
  }
 

Je suis probablement en train d'ennuyer le topicstatter avec mes recherches, si vous me le dites, je vais aller dans un monastère.

ZS : Finalement, le code fonctionnera sur des bits.

 
Merci.
 
sanyooooook:

Tu me le demandes ?

Voir l'exemple suivant : https://www.mql5.com/ru/articles/276
//------------------------------------------------------------------ SendData
bool SendData(string file, string mode)
{
  string smb=Symbol();
  string Head="Content-Type: application/x-www-form-urlencoded"; // заголовок
  string Path="/mt5swap/metaswap.php"; // путь к странице
  string Data="server="+AccountInfoString(ACCOUNT_SERVER)+
              "&pair="+smb+
              "&long="+DTS(SymbolInfoDouble(smb, SYMBOL_SWAP_LONG))+
              "&short="+DTS(SymbolInfoDouble(smb, SYMBOL_SWAP_SHORT));

  tagRequest req; // инициализация параметров
  if (mode=="GET")  req.Init(mode, Path+"?"+Data, Head, "",   false, file, true);
  if (mode=="POST") req.Init(mode, Path,          Head, Data, false, file, true);

  return(INet.Request(req)); // посылаем запрос на сервер
}
 

même cela ne fonctionne pas :

#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);
#import

#define  INTERNET_OPEN_TYPE_PRECONFIG  0   // use registry configuration
#define  INTERNET_FLAG_KEEP_CONNECTION   0x00400000  // use keep-alive semantics
#define  INTERNET_SERVICE_HTTP   3

//+------------------------------------------------------------------+
int start()
{
        string Host="https://secure.indx.ru";
        string Path="https://secure.indx.ru/api/v1/tradejson.asmx";
        
        // читаем данные 
        int h=FileOpen("text.txt", FILE_BIN|FILE_READ); if (h<0) return;
        FileSeek(h, 0, SEEK_SET);       int size=MathFloor(FileSize(h)/4);
        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, "", "", "", INTERNET_FLAG_KEEP_CONNECTION, 0); 
        if (hResourceHandle<=0) { Print("error HttpOpenRequest()"); return(0); }
        
        result=HttpSendRequestA(hResourceHandle, "Content-Type: application/x-www-form-urlencoded", 47, data, size);
        Print(result);
        if (result<=0) { Print("error HttpSendRequestA()"); return(0); }
        
        InternetCloseHandle(hResourceHandle);
        InternetCloseHandle(hConnectHandle);
        InternetCloseHandle(hInternetSession);
}
//+------------------------------------------------------------------+
 

Je ne pense pas que Json fonctionnera ici non plus.

je l'ai exécuté avec les paramètres par défaut, il ne fonctionne pas, erreur sur la fonction post

HttpSendRequestwW
 
et je pense que le problème vient de cette fonction, à en juger par les commentaires , je ne suis pas le seul à ne pas réussir à la faire fonctionner
 
sanyooooook:
et il me semble que le problème vient de cette fonction, à en juger par les commentaires , je ne suis pas le seul à ne pas réussir à la faire fonctionner
https://www.mql5.com/ru/articles/276
 

J'ai regardé l'article, il envoie quelque chose comme : server=Metaquotes&pair=EURUSD&bid=1.4512&time=13286794

J'ai besoin de l'envoyer au format json. D'après ce que j'ai compris, c'est la même chose mais au lieu d'une chaîne rouge, c'est ceci avec ses propres paramètres : {"Login":"","Wmid":"","Culture":"","Signature":""}

Si l'envoi se faisait, je recevrais au moins un message indiquant que la demande n'est pas valide, mais au lieu de cela, j'obtiens le silence.

 
sanyooooook:

J'ai regardé l'article, il envoie quelque chose comme : server=Metaquotes&pair=EURUSD&bid=1.4512&time=13286794

J'ai besoin de l'envoyer au format json. D'après ce que j'ai compris, c'est la même chose mais au lieu d'une chaîne rouge, c'est ceci avec ses propres paramètres : {"Login":"","Wmid":"","Culture":"","Signature":""}

Eh bien, oui. J'espère que vous ne confondez pas la méthode d'envoi (POST) et son format de données (json dans votre cas).

Si l'envoi allait, au moins je recevrais un shibboleth que la demande n'est pas correcte, mais à la place de ce silence.

Sasha, mets-toi une sorte de Charles, pourquoi souffres-tu autant :)

Raison: