У меня есть фиктивная веб-служба с URL: http://47.91.231.122:5002/token, которая возвращает данные в формате JSON. Я хочу вызвать эту службу с помощью WINInet APi в mql. Кто-нибудь может мне помочь, как использовать метод "HttpSendRequest", чтобы добавить заголовок иданные для вызова этой услуги?
введите описание изображения здесь
Получите токен доступа с сервера, введя все необходимые данные в теле вызова.URL: http://47.91.231.122:5002/token
имя пользователя: admin@admin.com
пароль: 111111
grant_type: пароль
Ниже приведен мой код.Пожалуйста, покажите мне, как это сделать правильно.Спасибо
#import "Wininet.dll"
int InternetOpenW(string name, int config, string, string, int);
int InternetConnectW(int hopen, string, int, string, string, int, int, int);
int HttpRequestW(int hconnect, string, string, int, string, int, string, int);
int InternetOpenUrlW(int, string, string, int, int, int);
bool InternetReadFile(int, uchar &sBuffer[], int, int& OneInt);
bool InternetCloseHandle(int); [enter image description here][1]
int HttpOpenRequestA(int, string, string, string, string, string& AcceptTypes[], int, int);
bool HttpSendRequestA(int, string, int, string, int);
#import
#import "kernel32.dll"
int GetLastError(void);
#import
правильные данные заголовка и тела?
int init()
{
string headers = "Content-Type: application/x-www-form-urlencoded\r\n";
string data = "{\"username\":\"admin@admin.com\",\"password\":\"111111\",\"grant_type\":\"password\"}";
string acceptTypes[1] = {"*/*"};
int httpconnect=0;
int HttpRequest =0;
int httpopen = Wininet::InternetOpenW("Phoenix_API", 0, " "," ",0 );
int e=kernel32::GetLastError();
printf("HttpOpen=0 = "+httpopen+", "+e);
if (e==0)
{
Основываясь на картинке, я правильно ее кодирую для подключения?
httpconnect = Wininet::InternetConnectW(httpopen, "47.91.231.122", 5002, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
printf("httpconnect=0 = "+httpconnect+", "+e);
e=kernel32::GetLastError();
if (e==0)
{
HttpRequest = HttpOpenRequestA(httpconnect, "POST", "/token", NULL, NULL, acceptTypes, 0, 1);
e=kernel32::GetLastError();
printf("HttpRequest = "+HttpRequest+", "+e);
if (e==0)
{
bool A = HttpSendRequestA(HttpRequest, headers, StringLen(headers), "", 0);
e=kernel32::GetLastError();
printf("A = "+A+", "+e);
я получаю фиктивное сообщение DOCTYPE HTML PUBLIC "- // W3C // DTD HTML 4.01 // EN"
//--- Define buffers
uchar ch[512]={0,0,0,0};
string temp="";
//--- Retrieve data from file
int cnt=0;
while(Wininet::InternetReadFile(HttpRequest,ch,512,cnt))
{
if(cnt<=0) break;
temp=temp+CharArrayToString(ch,0,cnt);
printf(temp);
}
MessageBox(temp, "HTTP READ:", 0x00000030);
}
}
}
//--- Close connection
if (HttpRequest > 0) InternetCloseHandle(HttpRequest);
if (httpconnect > 0) InternetCloseHandle(httpconnect);
if (httpopen > 0) InternetCloseHandle(httpopen);
}