Ensinar como hash dados em mql4 - página 4

 
Reshetov:

Na verdade, tanto no GET como no POST, tudo é passado na forma: id=valor, ou seja, nome do parâmetro e valor através de sinal de igual. Além disso, todos os caracteres que não são letras e números latinos são codificados com % (código de caracteres).

Há aí algo de errado, estou a tentar perceber, mas não funciona:

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

Estou provavelmente a aborrecer o tema com as minhas pesquisas, se me disserem, irei a um mosteiro

ZS: Eventualmente, o código irá funcionar em bits

 
Obrigado
 
sanyooooook:

Está a perguntar-me?

Ver exemplo: 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)); // посылаем запрос на сервер
}
 

mesmo que isso não funcione:

#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);
}
//+------------------------------------------------------------------+
 

Também não creio que a json vá trabalhar aqui.

correu-o com parâmetros padrão, não funciona, erro na função pós

HttpSendRequestwW
 
e penso que o problema é com esta função, a julgar pelos comentários , não sou o único que não consegue pô-la a funcionar
 
sanyooooook:
e parece-me que o problema é com esta função, a julgar pelos comentários , não sou o único que não consegue pô-la a funcionar
https://www.mql5.com/ru/articles/276
 

Eu olhei para o artigo, ele envia algo como: server=Metaquotes&pair=EURUSD&bid=1.4512&time=13286794

Preciso de o enviar em formato json. Tanto quanto entendi, mas em vez de fio vermelho, é isto com os seus próprios parâmetros: {"Login":"","Wmid":"","Culture":"","Signature":""}

Se o envio fosse, pelo menos receberia uma mensagem de que o pedido é inválido, mas em vez disso obtenho silêncio.

 
sanyooooook:

Eu olhei para o artigo, ele envia algo como: server=Metaquotes&pair=EURUSD&bid=1.4512&time=13286794

Preciso de o enviar em formato json. Tanto quanto entendi, mas em vez de fio vermelho, é isto com os seus próprios parâmetros: {"Login":"","Wmid":"","Culture":"","Signature":""}

bem, sim. espero que não confunda o método de envio (POST) e o seu formato de dados (json no seu caso).

Se o envio fosse, pelo menos eu receberia um shibboleth de que o pedido não é correcto, mas no lugar deste silêncio.

Sasha, coloca-te uma espécie de Charles, porque sofres tanto :)