mql4でデータをハッシュ化する方法を教える - ページ 4

 
Reshetov:

実際、GETとPOSTのどちらのリクエストでも、すべてはid=valueという形式で渡されます。つまり、パラメータ名と値が等号で結ばれています。また、ラテン文字と数字以外の文字は%(文字コード)でコード化されます。

何かおかしいな、と思って調べているのですが、うまくいきません。

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

私はおそらく、私の研究でトピックスタッターを退屈させている、あなたが私に言うならば、私は修道院に 行くでしょう。

ZS: 最終的には、コードがビット上で動作するようになります。

 
ありがとうございました。
 
sanyooooook:

私に聞いているのですか?

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

でもうまくいかない。

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

ここでもjsonは使えないと思います。

デフォルトのパラメータで実行したところ、うまくいきません。

HttpSendRequestwW
 
で、問題はこの関数にあると思います。コメントから 判断すると、この関数が動作しないのは私だけではなさそうです。
 
sanyooooook:
コメントから 判断すると、問題はこの関数にあるようです。
https://www.mql5.com/ru/articles/276
 

記事を見ると、server=Metaquotes&pair=EURUSD&bid=1.4512&time=13286794の ようなものが送信されています。

私はそれをjsonフォーマットで送信する必要があります。 私が理解する限り、すべてが同じですが、赤い文字列の代わりに、独自のパラメータを持つこのです。{"Login":"","Wmid":"","Culture":"","Signature":""}

送信に成功すれば、少なくともリクエストが無効であるというメッセージが表示されるはずですが、その代わりに沈黙が続きます。

 
sanyooooook:

記事を見ると、server=Metaquotes&pair=EURUSD&bid=1.4512&time=13286794の ようなものが送信されています。

私はそれをjsonフォーマットで送信する必要があります。 私が理解する限り、すべてが同じですが、赤い文字列の代わりに、独自のパラメータを持つこのです。{"Login":"","Wmid":"","Culture":"","Signature":""}

送信方法(POST)とデータ形式(あなたの場合、json)を混同しないでほしい。

送信は行くとして、少なくとも私はこの沈黙の代わりに、要求が正しくないというしっぺ返しを食らうだろう。

サーシャ、自分自身にシャルルのようなものを置いて、なぜそんなに苦しんでいるのか......。)