Enseñar cómo hacer un hash de datos en mql4 - página 4

 
Reshetov:

En realidad, tanto en las peticiones GET como en las POST todo se pasa de la forma: id=valor, es decir, nombre del parámetro y valor a través del signo de igualdad. Además, todos los caracteres que no son letras y números latinos se codifican con % (código de caracteres).

Hay algo que no funciona, estoy intentando averiguarlo, pero no funciona:

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

Probablemente estoy aburriendo al topicstatter con mis investigaciones, si me lo dices, me iré a un monasterio

ZS: Finalmente, el código funcionará en bits

 
Gracias
 
sanyooooook:

¿Me estás preguntando a mí?

Véase el ejemplo: 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)); // посылаем запрос на сервер
}
 
Reshetov:
Véase el ejemplo: https://www.mql5.com/ru/articles/276

incluso eso no funciona:

#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);
}
//+------------------------------------------------------------------+
 
Reshetov:
Véase el ejemplo: https://www.mql5.com/ru/articles/276

Tampoco creo que json funcione aquí.

lo he ejecutado con los parámetros por defecto, no funciona, error en la función post

HttpSendRequestwW
 
y creo que el problema está en esta función, a juzgar por los comentarios , no soy el único que no consigue que funcione
 
sanyooooook:
y me parece que el problema está en esta función, a juzgar por los comentarios , no soy el único que no consigue que funcione
https://www.mql5.com/ru/articles/276
 

He mirado el artículo, manda algo así como: server=Metaquotes&pair=EURUSD&bid=1.4512&time=13286794

Necesito enviarlo en formato json. Por lo que entendí todo igual pero en vez de cadena roja es esto con sus propios parámetros: {"Login":"","Wmid":"","Culture":"","Signature":""}

Si el envío fuera, al menos recibiría un mensaje de que la solicitud no es válida, pero en lugar de eso recibo el silencio.

 
sanyooooook:

He mirado el artículo, manda algo así como: server=Metaquotes&pair=EURUSD&bid=1.4512&time=13286794

Necesito enviarlo en formato json. Por lo que entendí todo igual pero en vez de cadena roja es esto con sus propios parámetros: {"Login":"","Wmid":"","Culture":"","Signature":""}

bueno, sí. espero que no confundas el método de envío (POST) y el formato de los datos en él (json en tu caso).

Si el envío fuera, al menos obtendría un shibboleth que la solicitud no es correcta, pero en lugar de este silencio.

Sasha, ponte algún tipo de Charles, por qué sufres tanto :)