mql4에서 데이터를 해시하는 방법 배우기 - 페이지 3

 
Reshetov :

문제는 간접비를 계산할 수 있지만 그 이면의 이익을 볼 수 없다는 것입니다.

나는 이미 이익을 얻었고 나쁘지 않습니다. 전체 질문은 암호화에 있습니다.
 
TheXpert :

첫째, SHA256이 아니라 HMAC SHA512입니다.

BTC-e에 있습니다
 
sanyooooook :
나는 이미 이익을 얻었고 나쁘지 않습니다. 전체 질문은 암호화에 있습니다.

그러한 메시지를 보낸 후 이익을 암호화하기에는 이미 너무 늦었습니다. 결국, 사기꾼은 이미 알고 있고 곧 빛을 볼 것입니다. 그리고 그들은 오랫동안 찾을 필요가 없습니다. 지붕이없는 외곽의 집 - 거기에 sanyooooook 이 이익을 암호화합니다.

 
Reshetov :

그러한 메시지를 보낸 후 이익을 암호화하기에는 이미 너무 늦었습니다. 결국, 사기꾼은 이미 알고 있고 곧 빛을 볼 것입니다. 그리고 그들은 오랫동안 찾을 필요가 없습니다. 지붕이없는 외곽의 집 - 거기에 sanyooooook 이 이익을 암호화합니다.

"우리는 회색 늑대를 두려워하지 않습니다")
 
sanyooooook :
BTC-e에 있습니다

이해했다. 그건 그렇고, 당신은 두려워합니다. 어쨌든 winepi를 사용하면 먼저 작동하는 코드를 만든 다음 mql로 번역합니다. 그러나 독립적인 프로그램인 mql로 무언가를 작성하는 것은... 요점이 무엇입니까?

날카로운 것을 원하지 않으면 파이썬을 배우십시오. 돈을 원하면 공부를 해야 한다.

 
TheXpert :

이해했다. 그건 그렇고, 당신은 두려워합니다. 어쨌든 winepi를 사용하면 먼저 작동하는 코드를 만든 다음 mql로 번역합니다. 그러나 독립적인 프로그램인 mql로 무언가를 작성하는 것은... 요점이 무엇입니까?

날카로운 것을 원하지 않으면 파이썬을 배우십시오. 돈을 원하면 공부를 해야 한다.

젠장 여기 봐:

1. API 교환에서 json 형식으로 포스트 요청 보내기 (json 블라인드는 어렵지 않습니다)

2. 이 요청에서 데이터의 일부가 해시되는데, 여기에서 문제가 발생하지만 이것도 문제가 되지는 않습니다. 알아냈습니다. 데이터)

3.이 감염은 아무것도 보내고 싶지 않습니다. 아마도 내가 게시물을 올바르게 수행하지 않는 것입니까?

 //+------------------------------------------------------------------+
//|                                                     POSTBTCE.mq4 |
//|                      Copyright © 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012, MetaQuotes Software Corp."
#property link        "http://www.metaquotes.net"

#include <stdlib.mqh>

#import "wininet.dll"

#define INTERNET_OPEN_TYPE_DIRECT       0
#define INTERNET_OPEN_TYPE_PRECONFIG     1
#define INTERNET_OPEN_TYPE_PROXY         3

// Had to cut the following two defines because of silly MQL4 identifier limits

#define _IGNORE_REDIRECT_TO_HTTP         0x00008000
#define _IGNORE_REDIRECT_TO_HTTPS       0x00004000

#define INTERNET_FLAG_KEEP_CONNECTION   0x00400000
#define INTERNET_FLAG_NO_AUTO_REDIRECT   0x00200000
#define INTERNET_FLAG_NO_COOKIES         0x00080000
#define INTERNET_FLAG_RELOAD             0x80000000
#define INTERNET_FLAG_NO_CACHE_WRITE     0x04000000
#define INTERNET_FLAG_DONT_CACHE         0x04000000
#define INTERNET_FLAG_PRAGMA_NOCACHE     0x00000100
#define INTERNET_FLAG_NO_UI             0x00000200

#define HTTP_ADDREQ_FLAG_ADD             0x20000000
#define HTTP_ADDREQ_FLAG_REPLACE         0x80000000

#define INTERNET_SERVICE_HTTP           3
#define INTERNET_DEFAULT_HTTP_PORT       80

#define ICU_ESCAPE                       0x80000000
#define ICU_USERNAME                     0x40000000
#define ICU_NO_ENCODE                   0x20000000
#define ICU_DECODE                       0x10000000
#define ICU_NO_META                     0x08000000
#define ICU_ENCODE_PERCENT               0x00001000
#define ICU_ENCODE_SPACES_ONLY           0x04000000
#define ICU_BROWSER_MODE                 0x02000000

#define AGENT                           "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)"
#define BUFSIZ                           128

#define REQUEST_FILE                     "_req.txt"

////////////// PROTOTYPES

bool InternetCanonicalizeUrlA( string lpszUrl, string lpszBuffer, int & lpdwBufferLength[], int dwFlags);

int InternetOpenA( string sAgent, int lAccessType, string sProxyName= "" , string sProxyBypass= "" , int lFlags= 0 );

int InternetOpenUrlA( int hInternetSession, string sUrl, string sHeaders= "" , int lHeadersLength= 0 , int lFlags= 0 ,
   int lContext= 0 );

int InternetReadFile( int hFile, string sBuffer, int lNumBytesToRead, int & lNumberOfBytesRead[]);

int InternetCloseHandle( int hInet);

int InternetConnectA( int handle, string host, int port, string user, string pass, int service, int flags, int context);

bool HttpSendRequestA( int handle, string headers, int headersLen, int & optional[], int optionalLen);

bool HttpAddRequestHeadersA( int handle, string headers, int headersLen, int modifiers);

int HttpOpenRequestA( int hConnect, string lpszVerb, string lpszObjectName, string lpszVersion,
 string lpszReferer, string & lplpszAcceptTypes[], int dwFlags, int dwContext);

#import

//////// CODE

bool HttpGET( string strUrl, string & strWebPage)
{
   int hSession = InternetOpenA(AGENT, INTERNET_OPEN_TYPE_DIRECT, "0" , "0" , 0 );

   int hReq = InternetOpenUrlA(hSession, strUrl, "0" , 0 ,
        INTERNET_FLAG_NO_CACHE_WRITE |
        INTERNET_FLAG_PRAGMA_NOCACHE |
        INTERNET_FLAG_RELOAD, 0 );

   if (hReq == 0 ) {
     return ( false );
  }

   int      lReturn[]  = { 1 };
   string   sBuffer    = "" ;

   while (TRUE) {
     if (InternetReadFile(hReq, sBuffer, BUFSIZ, lReturn) <= 0 || lReturn[ 0 ] == 0 ) {
       break ;
    }
    strWebPage = StringConcatenate (strWebPage, StringSubstr (sBuffer, 0 , lReturn[ 0 ]));
  }

  InternetCloseHandle(hReq);
  InternetCloseHandle(hSession);

   return ( true );
}

/////////// POST

bool HttpPOST( string host, string script, string params[][], string filenames[][], string & strWebPage)
{
   int hIntrn = InternetOpenA(AGENT, INTERNET_OPEN_TYPE_DIRECT, "0" , "0" , 0 );
   if (hIntrn == 0 ) {
     return ( false );
  }

   int hConn = InternetConnectA(hIntrn,
                              host,
                              INTERNET_DEFAULT_HTTP_PORT,
                               NULL ,
                               NULL ,
                              INTERNET_SERVICE_HTTP,
                               0 ,
                               NULL );

   if (hConn == 0 ) {
     return ( false );
  }

   int dwOpenRequestFlags =   // _IGNORE_REDIRECT_TO_HTTP |
                             // _IGNORE_REDIRECT_TO_HTTPS |
                             // INTERNET_FLAG_KEEP_CONNECTION |
                             // INTERNET_FLAG_NO_AUTO_REDIRECT |
                             // INTERNET_FLAG_NO_COOKIES |
                             // INTERNET_FLAG_NO_CACHE_WRITE |
                             INTERNET_FLAG_NO_UI |
                             INTERNET_FLAG_RELOAD;

   string accept[] = { "Accept: text/*\r\n" };

   int hReq = HttpOpenRequestA(hConn,
                             "POST" ,
                             script,
                             "HTTP/1.0" ,
                             NULL ,
                             accept,
                             dwOpenRequestFlags,
                             NULL );

   string strBoundary = "---------------------------HOFSTADTER" ;
   string strContentHeader = "Content-Type: multipart/form-data; boundary=" + strBoundary;

  HttpAddRequestHeadersA(hReq, strContentHeader, StringLen (strContentHeader), HTTP_ADDREQ_FLAG_REPLACE);

   int i     = 0 ,
      idx   = 0 ,
      r     = 0 ,
      len   = 0
  ;

   string hdr = "" ;

   int _req = FileOpen (REQUEST_FILE, FILE_BIN | FILE_WRITE );
   if (_req <= 0 ) {
     return ( false );
  }

   // Add parameters to request body

   for (i = ArrayRange (params, 0 ) - 1 ; i >= 0 ; i--) {
    hdr = StringConcatenate (
       "--" , strBoundary, "\r\n" ,
       "Content-Disposition: form-data; name=\"" , params[i][ 0 ], "\"\r\n\r\n" ,
      params[i][ 1 ], "\r\n" );
     FileWriteString (_req, hdr, StringLen (hdr));
  }

   // Add files to request body
  
   for (i = ArrayRange (filenames, 0 ) - 1 ; i >= 0 ; i--) {
    hdr = StringConcatenate (
       "--" , strBoundary, "\r\n" ,
       "Content-Disposition: form-data; name=\"" , filenames[i][ 0 ], "\"; filename=\"" , filenames[i][ 1 ], "\"\r\n" ,
       "Content-Type: application/octet-stream\r\n\r\n" );

     FileWriteString (_req, hdr, StringLen (hdr));

     int handle = FileOpen (filenames[i][ 1 ], FILE_BIN | FILE_READ );
     if (handle <= 0 ) {
       return ( false );
    }
    len = FileSize (handle);
     for ( int b = 0 ; b < len; b++) {
       FileWriteInteger (_req, FileReadInteger (handle, CHAR_VALUE ), CHAR_VALUE );
    }
     FileClose (handle);
  }

   string boundaryEnd = "\r\n--" + strBoundary + "--\r\n" ;
   FileWriteString (_req, boundaryEnd, StringLen (boundaryEnd));

   FileClose (_req);

   // Re-reads saved POST data byte-to-byte from file in the pseudo-character array
   //  we need to send with HttpSendRequestA. This is due to the fact I know no clean
   //  way to cast strings _plus_ binary file contents to a character array in MQL.
   //  If you know how to do it properly feel free to contact me.

   int request[];

  _req = FileOpen (REQUEST_FILE, FILE_BIN | FILE_READ );
   if (_req <= 0 ) {
     return ( false );
  }
  len = FileSize (_req);

   ArrayResize (request, len);
   ArrayInitialize (request, 0 );

   for (i = 0 ; i < len; i++) {
    request[r] |= FileReadInteger (_req, CHAR_VALUE ) << (idx * 8 );
    idx = (idx + 1 ) % 4 ;
     if (idx == 0 ) {
      r++;
    }
  }
   FileClose (_req);

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

   // Read response

   int      lReturn[]  = { 1 };
   string   sBuffer    = "" ;

   while (TRUE) {
     if (InternetReadFile(hReq, sBuffer, BUFSIZ, lReturn) <= 0 || lReturn[ 0 ] == 0 ) {
       break ;
    }
    strWebPage = StringConcatenate (strWebPage, StringSubstr (sBuffer, 0 , lReturn[ 0 ]));
  }

  InternetCloseHandle(hReq);
  InternetCloseHandle(hConn);
  InternetCloseHandle(hIntrn);

   return ( true );
}


//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
string params[ 2 ][ 2 ];

params[ 0 ][ 0 ] = "key1" ;

params[ 0 ][ 1 ] = "value1" ;
params[ 1 ][ 0 ] = "key2" ;

params[ 1 ][ 1 ] = "value2" ;
// for multiple file upload

string filenames[ 2 ][ 2 ];
filenames[ 0 ][ 0 ] = "uploaded1" ; // name of form field for file upload

filenames[ 0 ][ 1 ] = "test1.txt" ; // file name in experts/files/ subfolder
filenames[ 1 ][ 0 ] = "uploaded2" ;
filenames[ 1 ][ 1 ] = "test2.txt" ;

string response;
string Signature= "DZeZIy/6H6fXGPEk8sdfgYJOYl0gGIlfivZqcfjbIzKk=" ;
string s= "{" +CharToStr( 34 )+ "Login" +CharToStr( 34 )+ ":" +CharToStr( 34 )+ "B8yQVM4tGWijT" +CharToStr( 34 )+ ","
            +CharToStr( 34 )+ "Wmid" +CharToStr( 34 )+ ":" +CharToStr( 34 )+ "" +CharToStr( 34 )+ ","
            +CharToStr( 34 )+ "Culture" +CharToStr( 34 )+ ":" +CharToStr( 34 )+ "ru-RU" +CharToStr( 34 )+ ","
            +CharToStr( 34 )+ "Signature" +CharToStr( 34 )+ ":" +CharToStr( 34 )+Signature+CharToStr( 34 )+ "}" ; Print (s);
HttpPOST( "https://secure.indx.ru/api/v1/tradejson.asmx" , s, params, filenames, response);

Print (response);
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
 

요청을 보내자마자 거래 기능 세트가 준비된 것으로 간주하십시오.

나머지는 씨앗이지만 이 새끼는 나에게 아무것도 돌려주지 않는다(((

요청 시 문자열이 올바르게 떠나지만 분명히 POST 보내기 기능을 올바르게 사용하고 있지 않습니다.

 
sanyooooook :
그래서 나는 그것을 일반 언어로 작성하고 문제가 있는 곳을 파악한 다음 MQL로 번역한다고 말합니다.
 

sanyooooook :

3.이 감염은 아무것도 보내고 싶지 않습니다. 아마도 내가 게시물을 올바르게 수행하지 않는 것입니까?

 ...
string response;
string Signature= "DZeZIy/6H6fXGPEk8sdfgYJOYl0gGIlfivZqcfjbIzKk=" ;
string s= "{" +CharToStr( 34 )+ "Login" +CharToStr( 34 )+ ":" +CharToStr( 34 )+ "B8yQVM4tGWijT" +CharToStr( 34 )+ ","
            +CharToStr( 34 )+ "Wmid" +CharToStr( 34 )+ ":" +CharToStr( 34 )+ "364823817435" +CharToStr( 34 )+ ","
            +CharToStr( 34 )+ "Culture" +CharToStr( 34 )+ ":" +CharToStr( 34 )+ "ru-RU" +CharToStr( 34 )+ ","
            +CharToStr( 34 )+ "Signature" +CharToStr( 34 )+ ":" +CharToStr( 34 )+Signature+CharToStr( 34 )+ "}" ; Print (s);
HttpPOST( "https://secure.indx.ru/api/v1/tradejson.asmx" , s, params, filenames, response);
...

사실, 모든 것은 id=value 형식으로 GET 및 POST 요청으로 전송됩니다. 매개변수 이름과 값은 등호로 구분됩니다. 또한 라틴 문자 및 숫자가 아닌 모든 문자는 %(문자 코드)로 인코딩됩니다.

저것들. 전달된 매개변수의 식별자가 params 배열에 저장되어 있다고 가정하면 변수 s도 매개변수에 해당하는 값을 전달하기 위해 동일한 차원의 배열이어야 합니까?

 
Reshetov :


저것들. params 배열이 전달된 매개변수의 식별자를 저장한다고 가정하면 변수 s도 매개변수에 해당하는 값을 전달하기 위해 동일한 차원의 배열이어야 합니까?

나한테 묻는거야?