Lehren, wie man Daten in mql4 hasht - Seite 4

 
Reshetov:

Sowohl bei GET- als auch bei POST-Anfragen wird alles in der Form: id=value übergeben, d.h. Parametername und Wert durch Gleichheitszeichen. Darüber hinaus werden alle Zeichen, die keine lateinischen Buchstaben und Zahlen sind, mit % (Zeichencode) kodiert.

Irgendetwas stimmt da nicht, ich versuche, es herauszufinden, aber es funktioniert nicht:

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

Wahrscheinlich langweile ich den Themenstatter mit meinen Forschungen, wenn Sie mir das sagen, gehe ich ins Kloster

ZS: Letztendlich wird der Code mit Bits funktionieren

 
Dankeschön
 
sanyooooook:

Fragst du mich?

Siehe Beispiel: 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:
Siehe Beispiel: https://www.mql5.com/ru/articles/276

Auch das funktioniert nicht:

#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:
Siehe Beispiel: https://www.mql5.com/ru/articles/276

Ich glaube auch nicht, dass json hier funktionieren wird.

habe es mit Standardparametern ausgeführt, es funktioniert nicht, Fehler bei der Post-Funktion

HttpSendRequestwW
 
und ich denke, das Problem liegt in dieser Funktion, denn den Kommentaren nach zu urteilen, bin ich nicht der einzige, der sie nicht zum Laufen bringt
 
sanyooooook:
und es scheint mir, dass das Problem mit dieser Funktion ist, nach den Kommentaren zu urteilen, bin ich nicht der einzige, der es nicht zum Laufen bringen kann
https://www.mql5.com/ru/articles/276
 

Ich habe mir den Artikel angesehen, er sendet etwas wie: server=Metaquotes&pair=EURUSD&bid=1.4512&time=13286794

Soweit ich das verstanden habe, ist es dasselbe, aber anstelle des roten Strings ist es dies mit seinen eigenen Parametern: {"Login":"","Wmid":"","Culture":"","Signature":""}

Wenn das Senden klappen würde, würde ich wenigstens eine Meldung erhalten, dass die Anfrage ungültig ist, aber stattdessen bekomme ich Schweigen.

 
sanyooooook:

Ich habe mir den Artikel angesehen, er sendet etwas wie: server=Metaquotes&pair=EURUSD&bid=1.4512&time=13286794

Soweit ich das verstanden habe, ist es dasselbe, aber anstelle des roten Strings ist es dies mit seinen eigenen Parametern: {"Login":"","Wmid":"","Culture":"","Signature":""}

Nun, ja. Ich hoffe, Sie verwechseln nicht die Sendemethode (POST) und das Datenformat (in Ihrem Fall json).

Wenn das Senden gehen würde, würde ich zumindest ein Schibboleth bekommen, dass die Anfrage nicht korrekt ist, aber stattdessen dieses Schweigen.

Sasha, setzen Sie sich eine Art von Charles, warum Sie so viel leiden :)

Grund der Beschwerde: