Скорее всего проблема в таймауте, попробуйте увеличить его.
Опять вылезла, причем пока не перезапускал, долго не появлялась эта ошибка... Вот код:
// Эта переменная описана в глобальном модуле string cookie = ""; Эти переменные описаны в процедуре получения данных string headers; int timeOut = 10000; char post[],result[]; string url = "http://24fx.ru/cabinet/"; string user = "login@mail.ru"; string pass = "mypass"; string authLoginStr = "auth_login"; string authStr = "auth_login=" + user + "&auth_password=" + pass; //Если есть куки, то шлем POST запрос, иначе GET if(cookie == "") { StringToCharArray(authStr, post, 0, StringLen(authStr)); res = WebRequest("POST", url, "", NULL, timeOut, post, ArraySize(post), result, headers); //Заполним куки if(res != -1) { index = StringFind(headers, "PHPSESSID="); //Если нашли строку с куками if(index > 0) { cookie = StringSubstr(headers, index, StringFind(headers, ";", index) - index + 1); } } } else { //Get data res = WebRequest("GET", url, cookie, NULL, timeOut, post, 0, result, headers); } if(res == -1) { Print("Ошибка в WebRequest. Код ошибки =",GetLastError()); //--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION); }
Не верю в электричество, поэтому сделал бы url константой. Просто и неприхотливо,- через define.
Кстати, у Вас Get и Post перепутаны.
Опять вылезла, причем пока не перезапускал, долго не появлялась эта ошибка... Вот код:
#import "kernel32.dll" int GetLastError(); #import Print(kernel32::GetLastError());
Решил не плодить темы а отписать тут, так как проблема с этой же функцией и ошибка та же.
Сегодня пол ночи убил на решение проблемы с функцией WebRequest(), которая наглым образом возвращала мне ошибку 5203, хотя в коде ошибок нет. В общем, в конце концов, набросал я вот такой тестовый скрипт:
//+------------------------------------------------------------------+ //| WebRequest_Test.mq4 | //| Copyright 2015, ir0407[@]ruforum.mt5.com | //| http://ruforum.mt5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, ir0407[@]ruforum.mt5.com" #property link "http://ruforum.mt5.com" #property version "1.00" #property strict string url = "http://mql5.com"; void OnStart() { string cookie = "", referer = "", headers = "", msg = "\n"; char post[], result[]; int timeout = 10000; ResetLastError(); int RequestRezult = WebRequest("GET", url, cookie, referer, timeout, post, 0, result, headers); if(RequestRezult == -1) { int Error = GetLastError(); switch(Error) { case ERR_WEBREQUEST_INVALID_ADDRESS: msg = StringConcatenate(msg, "Ошибка ", Error, ": ERR_WEBREQUEST_INVALID_ADDRESS - URL не прошел проверку", "\n"); break; case ERR_WEBREQUEST_CONNECT_FAILED: msg = StringConcatenate(msg, "Ошибка ", Error, ": ERR_WEBREQUEST_CONNECT_FAILED - Не удалось подключиться к указанному URL", "\n"); break; case ERR_WEBREQUEST_TIMEOUT: msg = StringConcatenate(msg, "Ошибка ", Error, ": ERR_WEBREQUEST_TIMEOUT - Превышен таймаут получения данных", "\n"); break; case ERR_WEBREQUEST_REQUEST_FAILED: msg = StringConcatenate(msg, "Ошибка ", Error, ": ERR_WEBREQUEST_REQUEST_FAILED - Ошибка в результате выполнения HTTP запроса", "\n"); break; case ERR_FUNCTION_NOT_CONFIRMED: msg = StringConcatenate(msg, "Ошибка ", Error, ": ERR_FUNCTION_NOT_CONFIRMED - Функция не разрешена.", "\n"); msg = StringConcatenate(msg, "Данного URL [", url, "] нет в списке для WebRequest()", "\n"); break; default: msg = StringConcatenate(msg, "Неизвестная ошибка #", Error, "\n"); } msg = StringConcatenate(msg, "result = ", CharArrayToString(result)); } else { msg = StringConcatenate(msg, "Запрос к [", url, "] отправлен успешно.\n"); msg = StringConcatenate(msg, "Результат запроса = ", RequestRezult,"\n"); msg = StringConcatenate(msg, "Ответ сервера = ", CharArrayToString(result)); } Comment(msg); }
И хотя в коде ошибки отсутствуют этот скрипт выводит вот такую ошибку:
Я уже весь WinAPI на куски "порвал, как Тузик грелку" в поисках решения проблемы почему же это там вываливается ошибка 12150 и отчего это АПИ не может добавить куда-то там какие-то там хедеры. А ларчик просто открывался...
После кучи экспериментов удалось обнаружить, что причиной такого поведения функции WebRequest() является параметр referer. В отличии от других параметров его нельзя инициализировать пустой строкой, как в скрипте, хотя для строковых переменных такая инициализация более чем логична. Так же нельзя его инициализировать и пробелами. Все что можно в него вписать, так это константа NULL или любое строковое значение, кроме пробелов. В этом случае функция отрабатывает корректно. Все остальные параметры нормально воспринимаются функцией WebRequest() при любых раскладах, т.е. их можно спокойно инициализировать как константой NULL, так и пустой строкой "" или строкой состоящей из одних пробелов.
Как по мне это ненормальное поведение этой функции. Поэтому хотелось бы, чтобы в следующих версиях терминала этот баг был исправлен.
Решил не плодить темы а отписать тут, так как проблема с этой же функцией и ошибка та же.
Сегодня пол ночи убил на решение проблемы с функцией WebRequest(), которая наглым образом возвращала мне ошибку 5203, хотя в коде ошибок нет. В общем, в конце концов, набросал я вот такой тестовый скрипт:
Спасибо за Ваше сообщение.
Мы проверили указанное Вами поведение и внесли необходимые правки в функцию WebRequest

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день.
Собственно вся проблема в теме. Сайт естественно добавлен. Это видно на приложенном скрине. Версия клиента 765.