ТС-у ранее говорили что в его посыле главное "засыпает и просыпается". Вот там вот может быть баг WebRequest, но надо привести таки код (не в виде "берите тут и правьте так") и сценарий. И чтобы сценарий можно повторить.
но очевидно что никому не надо :-)
PS/ вполне понимаю разработчиков, если недочёт с просыпанием убежал. Его и ловить долго и не соответствует основной идее эксплуатации. Но может быть, и быть даже билдо-ось-зависимым
Да нет же, не во сне суть! 100 раз уже говорил - главное время! Через время (2-3 часа) функция падает, но не для всех сайтов. Вот я отловил для СМе.
Хотите код из хелпа? Пожалуйста:
voidOnStart()
{
string cookie=NULL,headers;
char post[],result[];
string url="https://www.cmegroup.com/education/courses.html";
//--- для работы с сервером необходимо добавить URL //--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники"): //--- обнуляем код последней ошибки ResetLastError();
//--- загрузка html-страницыint res=WebRequest("GET",url,cookie,NULL,500,post,0,result,headers);
if(res==-1)
{
Print("Ошибка в WebRequest. Код ошибки =",GetLastError());
//--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавления MessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
}
else
{
if(res==200)
{
//--- успешная загрузка PrintFormat("Файл успешно загружен, размер %d байт.",ArraySize(result));
//PrintFormat("Заголовки сервера: %s",headers); //--- сохраняем данные в файл int filehandle=FileOpen("url.htm",FILE_WRITE|FILE_BIN);
if(filehandle!=INVALID_HANDLE)
{
//--- сохраняем содержимое массива result[] в файл FileWriteArray(filehandle,result,0,ArraySize(result));
//--- закрываем файл FileClose(filehandle);
}
elsePrint("Ошибка в FileOpen. Код ошибки =",GetLastError());
}
elsePrintFormat("Ошибка загрузки '%s', код %d",url,res);
}
}
//+------------------------------------------------------------------+//| WebRequest.mq5 |//| Copyright 2022, MetaQuotes Ltd. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2022, MetaQuotes Ltd."#property link"https://www.mql5.com"#property version"1.00"#property strict//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnStart()
{
char post[],result[];
string cookie=NULL
, result_headers=//как оказалось - заголовки не имеют значения для этой ошибки, вот что пробовал:
string headers1="X-Requested-With: XMLHttpRequest\r\nContent-Type: application/x-www-form-urlencoded";
string headers=
//"Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*'//*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n" //Список допустимых форматов ресурса."Accept: text/html\r\n"//Список допустимых форматов ресурса.//"Accept-Encoding: gzip, deflate, br\r\n" //Перечень поддерживаемых способов кодирования содержимого сущности при передаче.//"Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\r\n" //Список поддерживаемых естественных языков.//---"Accept-Language: en-US,en;q=0.5\r\n" //Список поддерживаемых естественных языков.//"Accept-Language: *\r\n""Cache-Control: no-cache\r\n""Connection: keep-alive\r\n"//После этого соединение не разрывается, а остаётся открытым. Когда клиент отправляет ещё один запрос, он использует это же соединение. Постоянные соединения закрываются после 115 секунд простоя,"Pragma: no-cache\r\n"//Особенные опции выполнения операции.//"Referer: https://www.cmegroup.com\r\n"//"Sec-Fetch-Dest: document\r\n" //выборки метаданных заголовка запроса указывает на запрос в пункт назначения . Это инициатор исходного запроса на выборку, где (и как) будут использоваться полученные данные.: Местом назначения является документ.//"Sec-Fetch-Mode: navigate\r\n" //выборки метаданных заголовка запроса указывает на режим запроса. Это позволяет серверу различать: запросы, исходящие от пользователя, перемещающегося между HTML-страницами и запросы других ресурсов.//"Sec-Fetch-Site: same-origin\r\n" //этот заголовок сообщает серверу,исходит ли запрос на ресурс от того же источника,того же сайта,другого сайта или является запросом "по инициативе пользователя".: Инициатор запроса и сервер, на котором размещен ресурс, имеют одинаковое происхождение (одинаковая схема, хост и порт).//"Sec-Fetch-User: ?1\r\n" //выборки заголовок метаданных запроса отправляется только для запросов , инициированных активацией пользователя, и его значение всегда будет ?1. Сервер может использовать этот заголовок,чтобы определить,был ли запрос на навигацию из документа,iframe и т.д.отправлен пользователем.//"Upgrade-Insecure-Requests: 1\r\n" //указывает, что URL-адреса содержимого из небезопасных (HTTP) источников должны быть безопасно получены по протоколу HTTPS. Все, кроме Microsoft Internet Explorer."User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36\r\n"//Список названий и версий клиента и его компонентов с комментариями.//"User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko\r\n"/*"sec-ch-ua: `\" Not A;Brand`\";v=`\"99`\", `\"Chromium`\";v=`\"101`\", `\"Google Chrome`\";v=`\"101`\"\r\n" //Заголовок содержит бренд и основную версию для каждого бренда, связанного с браузером, в списке, разделенном запятыми. Бренд — это коммерческое название пользовательского агента, такого как: Chromium, Opera, Google Chrome, Microsoft Edge, Firefox и Safari.
"sec-ch-ua-mobile: ?0\r\n" //указывает, находится ли браузер на мобильном устройстве. Он также может использоваться настольным браузером, чтобы указать предпочтение «мобильного» пользовательского интерфейса. ?0указывает, что пользовательский агент не предпочитает мобильный интерфейс (false).
"sec-ch-ua-platform: `\"Windows`\"\r\n" //предоставляет платформу или операционную систему, на которой работает пользовательский агент. Одна из следующих строк: "Android", "Chrome OS", "Chromium OS", "iOS", "Linux", "macOS", "Windows", или "Unknown".
*/;
//string url="https://finance.yahoo.com";string url="https://www.cmegroup.com/education/courses.html";
//string url="https://www.cmegroup.com";//--- для работы с сервером необходимо добавить URL "https://finance.yahoo.com"//--- в список разрешенных URL (Главное меню->Сервис->Настройки, вкладка "Советники")://--- обнуляем код последней ошибкиResetLastError();
//--- загрузка html-страницы с Yahoo Finance//int res=WebRequest("GET",url,cookie,NULL,1000,post,0,result,result_headers);int res=WebRequest("GET",url,headers,1000,post,result,result_headers);
if(res==-1)
{
Print("Ошибка в WebRequest. Код ошибки =",GetLastError());
//--- возможно, URL отсутствует в списке, выводим сообщение о необходимости его добавленияMessageBox("Необходимо добавить адрес '"+url+"' в список разрешенных URL во вкладке 'Советники'","Ошибка",MB_ICONINFORMATION);
}
else
{
if(res==200)
{
//--- успешная загрузкаPrintFormat("Файл успешно загружен, размер %d байт '%s' %s",ArraySize(result),url,CharArrayToString(result, 0, 15));
//PrintFormat("Заголовки сервера: %s",headers);//--- сохраняем данные в файл/*int filehandle=FileOpen("url.htm",FILE_WRITE|FILE_BIN);
if(filehandle!=INVALID_HANDLE)
{
//--- сохраняем содержимое массива result[] в файл
FileWriteArray(filehandle,result,0,ArraySize(result)); //в данном случае файл нам не нужен
//--- закрываем файл
FileClose(filehandle);
}
else
Print("Ошибка в FileOpen. Код ошибки =",GetLastError()); */
}
elsePrintFormat("Ошибка загрузки '%s', код %d",url,res);
}
}
//+------------------------------------------------------------------+
Это вариант WR с заголовками. Эти 2 варианта глючат одинаково. А то же самое с WinAPI - нет!
Вот так на нём сегодня выглядит нефть. Индикатор пользуется данными с биржи CME. Этот комплекс используется уже несколько лет (разработка 2015 года).
Обновлением данных занимается советник. Он работает по расписанию. Советник наполняет БД данными, а множество индикаторов пользуются этими данными.
Раньше все Inet-функции работали исключительно на WinAPI. Поскольку реализация их в МТ4/5 была мягко говоря не стабильная.
Примерно, года 3 назад в очередной раз испробовав встроенные запросы в МТ, я остался доволен и переписал на них всё, что касалось скачивания данных с CME и некоторый другие.
Всё работало хорошо и на МТ4 и на МТ5, один и тот же код (понятно, что есть незначительные различия в коде и они учтены).
Но где-то с полгода назад работа MT5 "поломалась", стали постоянные сбои в запросах спустя какое-то время простоя советника.
Скачиваются данные почти по всем ликвидным опционам на фьючерсы. Это список опционовиз мануала к индикатору.
Данные в папках структурированы по видам опционов:
Здесь показана только папка с файлами для нефти.
Вот тут виден объём скачанных со CME данных за последний год.
Здесь данные в обычном CSV-формате. Показываю, чтобы был виден объём скачанных данных за день.
Советник не занимается парсингом непосредственно самого сайта, он выполняет запросы для получения нужных данных.
Но если "поддержка" здесь такая, то я, конечно, вернусь к Wininet.
Поддержки здесь, можно сказать, нет.
Но если вы сможете создать минимальный пример, который явно воспроизведёт проблему у самих разработчиков - с большой вероятностью, они это, не комментируя, пофиксят.
Но если вы сможете создать минимальный пример, который явно воспроизведёт проблему у самих разработчиков - с большой вероятностью, они это, не комментируя, пофиксят.
Значит не судьба, явной ошибки-то нет, есть лишь при условии обращения к некому сайту повторно через некое время((...
Вы явно не хотите вникать в проблему, ну так я вас и не просил.... Чего время тратите. Зачем все ваши ссылки невпопад?
а смысл?
Вы ее себе создали и теперь танцы с бубном...
ТС-у ранее говорили что в его посыле главное "засыпает и просыпается". Вот там вот может быть баг WebRequest, но надо привести таки код (не в виде "берите тут и правьте так") и сценарий. И чтобы сценарий можно повторить.
но очевидно что никому не надо :-)
PS/ вполне понимаю разработчиков, если недочёт с просыпанием убежал. Его и ловить долго и не соответствует основной идее эксплуатации. Но может быть, и быть даже билдо-ось-зависимым
Да нет же, не во сне суть! 100 раз уже говорил - главное время! Через время (2-3 часа) функция падает, но не для всех сайтов. Вот я отловил для СМе.
Хотите код из хелпа? Пожалуйста:
Это вариант WR с заголовками. Эти 2 варианта глючат одинаково. А то же самое с WinAPI - нет!
а смысл?
Вы ее себе создали и теперь танцы с бубном...
Нет что сказать - не говорите. Вообще, я хочу установить диалог с разработчиками, но почему влезает всякая... не понимаю.
Хорошо, напишу зачем мне это.
Я создал некий торговый комплекс.
В его составе есть индикатор опционных уровней.
Вот так на нём сегодня выглядит нефть. Индикатор пользуется данными с биржи CME. Этот комплекс используется уже несколько лет (разработка 2015 года).
Обновлением данных занимается советник. Он работает по расписанию. Советник наполняет БД данными, а множество индикаторов пользуются этими данными.
Раньше все Inet-функции работали исключительно на WinAPI. Поскольку реализация их в МТ4/5 была мягко говоря не стабильная.
Примерно, года 3 назад в очередной раз испробовав встроенные запросы в МТ, я остался доволен и переписал на них всё, что касалось скачивания данных с CME и некоторый другие.
Всё работало хорошо и на МТ4 и на МТ5, один и тот же код (понятно, что есть незначительные различия в коде и они учтены).
Но где-то с полгода назад работа MT5 "поломалась", стали постоянные сбои в запросах спустя какое-то время простоя советника.
Скачиваются данные почти по всем ликвидным опционам на фьючерсы. Это список опционов из мануала к индикатору.
Данные в папках структурированы по видам опционов:
Здесь показана только папка с файлами для нефти.
Вот тут виден объём скачанных со CME данных за последний год.
Здесь данные в обычном CSV-формате. Показываю, чтобы был виден объём скачанных данных за день.
Советник не занимается парсингом непосредственно самого сайта, он выполняет запросы для получения нужных данных.
В Zip-архиве пример файла нефти в CSV-формате .
Написанное выше хочу чтобы не считали какой-то рекламой. Это только для того, чтобы уже звучал какой-то конструктив. А не бла-бла.
Работы было сделано много, надеюсь понятно, почему мне не хотелось бы возвращаться на функцию WebRequest с WinAPI?
Но если "поддержка" здесь такая, то я, конечно, вернусь к Wininet.
Но если "поддержка" здесь такая, то я, конечно, вернусь к Wininet.
Поддержки здесь, можно сказать, нет.
Но если вы сможете создать минимальный пример, который явно воспроизведёт проблему у самих разработчиков - с большой вероятностью, они это, не комментируя, пофиксят.
Поддержки здесь, можно сказать, нет.
Но если вы сможете создать минимальный пример, который явно воспроизведёт проблему у самих разработчиков - с большой вероятностью, они это, не комментируя, пофиксят.
Значит не судьба, явной ошибки-то нет, есть лишь при условии обращения к некому сайту повторно через некое время((...
Нет что сказать - не говорите. Вообще, я хочу установить диалог с разработчиками, но почему влезает всякая... не понимаю.
ну ну....
сначала в браузере свою ссыль проверьте.........
ну ну....
сначала в браузере свою ссыль проверьте.........
https://www.cmegroup.com/education/courses.html Что не так? Любая ссылка вот с этим хостом https://www.cmegroup.com пофигу какая не работает.
https://www.cmegroup.com/education/courses.html Что не так? Любая ссылка вот с этим хостом https://www.cmegroup.com пофигу какая не работает.
разговор то ни о чем получается до сих пор
по какой ссылке грузите реально?
мне кажется что Вы пользуетесь чем то чужим и Вам просто захотелось написать такое же, но чо та никак
Вы привели выше код - ну полная чушь,
WebRequestтак не скачает ни одного файла
сравните что Ваша ссылка кидает и что моя
//---
вот теперь вставьте эту ссылку в вебреквест и ждите - когда бахнется система
отвечу - никогда
удачи!
;)