Так же использовал вариант с библиотекой:
string sUrl; string sData; int logHandle = -1; bool bWinInetDebug = false; string content[]; int hSession_IEType; int hSession_Direct; int Internet_Open_Type_Preconfig = 0; int Internet_Open_Type_Direct = 1; int Internet_Open_Type_Proxy = 3; int Buffer_LEN = 80; #import "wininet.dll" #define INTERNET_FLAG_PRAGMA_NOCACHE 0x00000100 // Forces the request to be resolved by the origin server, even if a cached copy exists on the proxy. #define INTERNET_FLAG_NO_CACHE_WRITE 0x04000000 // Does not add the returned entity to the cache. #define INTERNET_FLAG_RELOAD 0x80000000 // Forces a download of the requested file, object, or directory listing from the origin server, not from the cache. int InternetOpenW( string sAgent, int lAccessType, string sProxyName, string sProxyBypass, int lFlags ); 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); #import //----------------------------------------------------------------------------------------------------------------------------------------------- void OnStart() { sUrl = "https://66.45.229.5/api?account="+(string)AccountInfoInteger(ACCOUNT_LOGIN)+"&data="+HistoricalResults(); GrabWeb(sUrl,sData); Alert(sData); } //----------------------------------------------------------------------------------------------------------------------------------------------- int hSession(bool Direct) { string InternetAgent; if (hSession_IEType == 0) { InternetAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461)"; hSession_IEType = InternetOpenW(InternetAgent, Internet_Open_Type_Preconfig, "0", "0", 0); hSession_Direct = InternetOpenW(InternetAgent, Internet_Open_Type_Direct, "0", "0", 0); } if (Direct) return(hSession_Direct); else return(hSession_IEType); } //----------------------------------------------------------------------------------------------------------------------------------------------- bool GrabWeb(string strUrl, string& strWebPage) { int hInternet; int iResult; int lReturn[] = {1}; uchar sBuffer[1024]; int bytes; uint flags=INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_PRAGMA_NOCACHE | INTERNET_FLAG_RELOAD; hInternet = InternetOpenUrlW(hSession(false), strUrl, NULL, 0, flags); //hInternet = InternetOpenUrlW(hSession(FALSE), strUrl, "0", 0, // INTERNET_FLAG_NO_CACHE_WRITE | // INTERNET_FLAG_PRAGMA_NOCACHE | // INTERNET_FLAG_RELOAD, 0); if (hInternet == 0) return(false); Print("Reading URL: " + strUrl); //added by MN iResult = InternetReadFile(hInternet, sBuffer, Buffer_LEN, lReturn); if (iResult == 0) return(false); bytes = lReturn[0]; strWebPage = CharArrayToString(sBuffer, 0, lReturn[0],CP_UTF8); //If there's more data then keep reading it into the buffer while (lReturn[0] != 0) { iResult = InternetReadFile(hInternet, sBuffer, Buffer_LEN, lReturn); if (lReturn[0]==0) break; bytes = bytes + lReturn[0]; strWebPage = strWebPage + CharArrayToString(sBuffer, 0, lReturn[0],CP_UTF8); } Print("Closing URL web connection"); //added by MN iResult = InternetCloseHandle(hInternet); if (iResult == 0) return(false); return(true); }
Приходит пустота в ответ.
Запрос идет на сервер по IP адресу https://66.45.229.5/api и в ответе ошибка - 1
попробуйте конектится все-таки к http://66.45.229.5/api
попробуйте конектится все-таки к http://66.45.229.5/api
Возвращает 404 ошибку (нет страницы).
Возможно, причина в том, что не проходит валидация сертификата безопасности для https, поскольку указывается ip адресс, а не домен для которого сертификат:
DNS Name=forex.com DNS Name=mail.forex.com DNS Name=www.forex.com
Попробуйте добавить сертификат в список доверенных сертификатов (легко проверяется из хрома в анонимном режиме, что бы не было предупреждения о невалидном сертификате)
или перевести работу сайта на http, если он ваш.
Работает ли адекватно MQL WebRequest с запросами на ip, честно говоря, не знаю, в теории должен ))
Есть функция WebRequest:
Запрос идет на сервер по IP адресу https://66.45.229.5/api и в ответе ошибка - 1
В чем может быть дело? Является ли проблемой запрос к серверу по IP, а не по домену ?
Пробуйте то же самое в браузере и смотрите лог запросов. Если в браузере работает, ищите разницу между хедерами запросов, которые генерирует WebRequest и браузер.
Пробуйте то же самое в браузере и смотрите лог запросов. Если в браузере работает, ищите разницу между хедерами запросов, которые генерирует WebRequest и браузер.
Спасибо. Не стал заморачиваться и сказал клиенту купить домен :)
Спасибо. Не стал заморачиваться и сказал клиенту купить домен :)
Ну да, зачем тратить свое время и разобраться в том, что обязались сделать, если можно просто кинуть клиента на бабки.
Шикарный подход.
1) добавить в hosts что по пути C:\Windows\System32\drivers\etc строку:
66.45.229.5 mail.forex.com
2) добавить сертификат от https://66.45.229.5/api в список доверенных
И по идеи все должно удачно работать как:
string Web() { string cookie=NULL,headers,content[]; char post[],result[]; int timeout=5000,res; string url="https://mail.forex.com/api"; string PostString = "account="+(string)AccountInfoInteger(ACCOUNT_LOGIN)+ "&data="+HistoricalResults(); StringToCharArray(PostString, post, 0, StringLen(PostString)); ResetLastError(); res = WebRequest("POST",url,cookie,NULL,timeout,post,0,result,headers); if(res==200) return CharArrayToString(result); return ""; }
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте всем!
Есть функция WebRequest:
Запрос идет на сервер по IP адресу https://66.45.229.5/api и в ответе ошибка - 1
В чем может быть дело? Является ли проблемой запрос к серверу по IP, а не по домену ?
Спасибо заранее.