Простой POST/GET HttpRequest с помощью mql4 - страница 3

 
coolex:

Если я выполню изменение, то получу сообщение об ошибке "'&' - ссылка не может быть использована".


Это была просто подсказка, а не руководство к действию.
 
какую сборку MT4 вы используете?
 

Я использую Build 610.

 
coolex:

Я использую сборку 610.


Я также пытаюсь использовать код, и он дает мне ошибки "Access Violation" с билдом 610.

Согласно этому сообщению (https://www.mql5.com/en/articles/276) пользователи на MQL5 получают ту же проблему .....

B&KR.

 

я использую B617 и он работает просто отлично, я собираюсь установить B610, чтобы проверить это.

пожалуйста, будьте терпеливы ;-)
 

вот так (исправлено для B610)

#import  "Wininet.dll"
   int InternetOpenW(string, int, string, string, int);
   int InternetConnectW(int, string, int, string, string, int, int, int); 
   int InternetOpenUrlW(int, string, string, int, int, int);
   int InternetReadFile(int, string, int, int& OneInt[]);
   int InternetCloseHandle(int); 
   int HttpOpenRequestW(int, string, string, string, string, char& AcceptTypes[], int, int);
   bool HttpSendRequestW(int, string, int, string, int);
#import
#import "kernel32.dll"
int GetLastError(void);
#import


   string headers = "Content-Type: application/x-www-form-urlencoded";
   string data = "";
   string Types = "";
   char acceptTypes[];
   StringToCharArray(Types, acceptTypes);
   int HttpOpen = InternetOpenW(" ", 0, " ", "", 0);  
   int HttpConnect = InternetConnectW(HttpOpen, "www.forexfactory.com", 80, "", "", 3, 0, 0);
   int HttpRequest = HttpOpenRequestW(HttpConnect, "GET", "ff_calendar_thisweek.xml", "", "", acceptTypes, 0, 0);   
   bool result = HttpSendRequestW(HttpRequest, headers, StringLen(headers), data, StringLen(data));
   Alert ("Last MSDN Error =: ", kernel32::GetLastError());
   int read[1];
   Print("This is the POST result: ", result);
   InternetCloseHandle(HttpOpen);
   InternetCloseHandle(HttpRequest);
 

и этот пример работает для

#import  "Wininet.dll"
   int InternetOpenW(string, int, string, string, int);
   int InternetConnectW(int, string, int, string, string, int, int, int); 
   int InternetOpenUrlW(int, string, string, int, int, int);
   int InternetReadFile(int, string, int, int& OneInt[]);
   int InternetCloseHandle(int); 
   int HttpOpenRequestW(int, string, string, string, string, string, int, int);
   bool HttpSendRequestW(int, string, int, string, int);
#import
#import "kernel32.dll"
int GetLastError(void);
#import


   string headers = "Content-Type: application/x-www-form-urlencoded";
   string data = "";
   int HttpOpen = InternetOpenW(" ", 0, " ", "", 0);  
   int HttpConnect = InternetConnectW(HttpOpen, "www.forexfactory.com", 80, "", "", 3, 0, 0);
   int HttpRequest = HttpOpenRequestW(HttpConnect, "GET", "ff_calendar_thisweek.xml", "", "", data, 0, 0);   
   bool result = HttpSendRequestW(HttpRequest, headers, StringLen(headers), data, StringLen(data));
   Alert ("Last MSDN Error =: ", kernel32::GetLastError());
   int read[1];
   Print("This is the POST result: ", result);
   InternetCloseHandle(HttpOpen);
   InternetCloseHandle(HttpRequest);
 

ЗДОРОВО! Оба примера работают. Огромное спасибо.

 
sergiensergien:

Согласно этому сообщению (https://www.mql5.com/en/articles/276) пользователи на MQL5 получают ту же проблему .....



это другая причина, почему они получают ошибку, но здесь MQL4, так что...
 
coolex:

ЗДОРОВО! Оба примера работают. Большое спасибо.


Я думаю, что вы должны использовать правильные параметры (или все из них)

#define  INTERNET_FLAG_PRAGMA_NOCACHE   0x00000100  // no caching of page
#define  INTERNET_FLAG_KEEP_CONNECTION  0x00400000  // keep connection
#define  INTERNET_FLAG_RELOAD           0x80000000  // get page from server when calling it

int HttpRequest = HttpOpenRequestW(HttpConnect, "GET", "ff_calendar_thisweek.xml", "", "", 0, 
INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_RELOAD|INTERNET_FLAG_PRAGMA_NOCACHE, 0);