int HttpGET(string strUrl, string& page, int timeout = -1) { int hSession = InternetOpenW(AGENT, 0, "", "", 0); RtlSetLastWin32Error(0); if (timeout > 0) { int option[] = {0}; option[0] = timeout; InternetSetOptionW(hSession, INTERNET_OPTION_CONNECT_TIMEOUT, option, 4); } int hURL = InternetOpenUrlW( hSession, strUrl, "", 0, INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD, 0); if (hURL == 0) { int err = RtlGetLastWin32Error(); Print("InternetOpenUrl failed with error = ", err); InternetCloseHandle(hSession); return (err); } int pRead[] = {0}; uchar buffer[200]; int size = ArraySize(buffer); while (true) { if (InternetReadFile(hURL, buffer, size, pRead) <= 0 || pRead[0] == 0) { break; } string sBuffer = CharArrayToString(buffer); StringAdd(page, StringSubstr(sBuffer, 0, pRead[0])); } InternetCloseHandle(hURL); InternetCloseHandle(hSession); return (0); }
const uint INTERNET_FLAG_KEEP_CONNECTION = 0x00400000; const uint INTERNET_FLAG_NO_AUTO_REDIRECT = 0x00200000; const uint INTERNET_FLAG_NO_COOKIES = 0x00080000; const uint INTERNET_FLAG_RELOAD = 0x80000000; const uint INTERNET_FLAG_NO_CACHE_WRITE = 0x04000000; const uint INTERNET_FLAG_DONT_CACHE = 0x04000000; const uint INTERNET_FLAG_PRAGMA_NOCACHE = 0x00000100; const uint INTERNET_FLAG_NO_UI = 0x00000200; #define INTERNET_OPTION_CONNECT_TIMEOUT 2 #define AGENT "any agent you need" #import "ntdll.dll" int RtlGetLastWin32Error(); int RtlSetLastWin32Error (int dwErrCode); #import "wininet.dll" int InternetOpenW(string sAgent, int lAccessType, string sProxyName = "", string sProxyBypass = "", int lFlags = 0); int InternetOpenUrlW(int hInternetSession, string sUrl, string sHeaders = "", int lHeadersLength = 0, int lFlags = 0, int lContext = 0); int InternetReadFile(int hFile, uchar& sBuffer[], int lNumBytesToRead, int& lNumberOfBytesRead[]); int InternetCloseHandle(int hInet); int InternetSetOptionW(int hInternet, int dwOption, int& lpBuffer[], int dwBufferLength); #importЭто для 4ки, для 5ки все хендлы и указатели надо делать 8-байтными
Подскажите, пжлста. Сколько не искал - не могу найти рабочий вариант.
Пытаюсь организовать отправку информации на сайт через HttpSendRequest из winapi.dll
Часть кода:
Компилятор ругается на 'data' - parameter conversion not allowed
Если меняю data на переменную string, то компилятор не ругается, но советник не отправляет никаких данных и int result=0
А если сделать data статическим масивом с заданным размером? В MSDN пишут, он должен быть типа LPVOID, то есть int*
Может из-за динамического массива проблемы.
в том и дело что он не подходит мне
Из приведенного кода не совсем понятно, чем не подходит? Открыли, положили, закрыли. Все обычно.
Из приведенного кода не совсем понятно, чем не подходит? Открыли, положили, закрыли. Все обычно.
необходимо именно через wininet
необходимо именно через wininet
Если https, то порт нужно использовать 443
Не работает в индикаторах, что не совсем логично
Не работает в индикаторах, что не совсем логично
Это хотя бы понятно, почему так сделано. Если MQ когда-нибудь дойдет до того, чтобы каждому индикатору выделить собственный поток, то может и функцию разрешат.
PS. Действительно при переводе кое-каких индюков на МТ5 пришлось закачку выделить в отдельный эксперт, а индюки читают скачанные данные из файла.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите, пжлста. Сколько не искал - не могу найти рабочий вариант.
Пытаюсь организовать отправку информации на сайт через HttpSendRequest из wininet.dll
Часть кода:
Компилятор ругается на 'data' - parameter conversion not allowed
Если меняю data на переменную string, то компилятор не ругается, но советник не отправляет никаких данных и int result=0