POST request wininet.dll

 

Как в mql сделать посредством wininet.dll POST запрос. Я подозреваю, что нижеследующим образом (ну, плюс ещё вставить в код сам запрос...):

#import "wininet.dll"

int InternetCloseHandle(int hInet);
int HttpOpenRequestA(
  int hConnect,
  string lpszVerb,
  string lpszObjectName,
  string lpszVersion,
  string lpszReferer,
  int lplpszAcceptTypes,
  int dwFlags,
  int dwContext
);
bool HttpSendRequestA(
  int hRequest,
  string lpszHeaders,
  int dwHeadersLength,
  string lpOptional,
  int dwOptionalLength
);
int InternetConnectA(
   int  hInternet,
   string  lpszServerName,
   int  nServerPort,
   string  lpszUsername,
   string  lpszPassword,
   int  dwService,
   int  dwFlags,
   int  dwContext
);
int InternetOpenA(
   string lpszAgent,
   int dwAccessType,
   string lpszProxyName,
   string lpszProxyBypass,
   int dwFlags
);

#import

bool Request() {
     int inet_handle = InternetOpenA("Microsoft Internet Explorer",0,NULL,NULL,0);
     Print("Session: ", inet_handle);
     
     int connect_handle = InternetConnectA(inet_handle, "hostname.net", 80, NULL, NULL, 3, 0, 1);
     Print("Connection: ", connect_handle);
     
     int request = HttpOpenRequestA(connect_handle, "POST", "processor.php", NULL, NULL, 0, 4194304, 1);
     Print("Request: ",request);
     
     bool res = HttpSendRequestA(request, NULL, 0, NULL, 0);//head, StringLen(head), data, StringLen(data));

     if (res == 0) { Print("Error!!!"); }
     InternetCloseHandle(request);
     InternetCloseHandle(connect_handle);
     InternetCloseHandle(inet_handle);
     return (res);
   }
Но HttpSendRequestA возвращает false. В чем ошибка?
 

вот пример https://www.mql5.com/ru/articles/73

прописываю заголовки явно.

отправляю так


//------------------------------------------------------------------ Request
bool Net.Request(string Verb, string Object, string &Out, bool toFile=false, string addData="", bool fromFile=false)
{
        if (toFile && Out=="") { Print("-File not specified"); return(false); }
        int data[]; int hRequest, hSend, h; 
        string Vers="HTTP/1.1"; string nill="";
        if (fromFile) { if (Net.FileToArray(addData, data)<0) { Print("-Err reading file "+addData); return(false); } }// прочитали файл в массив
        else Net.StringToArray(addData, data);

        
        if (Net.Session<=0 || Net.Connect<=0) { Net.Close(); if (!Net.Open(Net.Host, Net.Port)) { Print("-Err Connect"); Net.Close(); return(false); } }
        // создаем дескриптор запроса
        hRequest=HttpOpenRequestA(Net.Connect, Verb, Object, Vers, nill, nill, FLAG_KEEP_CONNECTION|FLAG_RELOAD|FLAG_PRAGMA_NOCACHE, 0); 
        if (hRequest<=0) { Print("-Err OpenRequest"); Net.Close(); return(false); }
        // отправляем запрос
        string head="Content-Type: application/x-www-form-urlencoded"; // заголовок на отправку
 ---->  hSend=HttpSendRequestA(hRequest, head, StringLen(head), data, ArraySize(data)*4); // отправили файл
        if (hSend<=0) { Print("-Err SendRequest"); InternetCloseHandle(hRequest); Net.Close(); }
        Net.ReadPage(hRequest, Out, toFile); // читаем страницу
        InternetCloseHandle(hRequest); InternetCloseHandle(hSend); // закрыли все хендлы
        return(true);
}
Работает без проблем.
 

Да, спасибо. Читал статью, но это для mql5. Думал, как бы это переписать четвёртый mql, но что-то как-то не решился. Вообще, это под mql4 реально переписать?

Или уже пора пересаживаться на пятый?

Причина обращения: