Телескопы покупают здесь


A A A A Автор Тема: Помогите с Java Script  (Прочитано 564 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн StasVАвтор темы

  • *****
  • Сообщений: 2 737
  • Благодарностей: 440
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от StasV
Помогите с Java Script
« : 21 Дек 2022 [20:43:17] »
Пишу скрипт для управления обсерваторией под ACP
Стоит задача копировать на локальный компьютер изображение с All-sky камеры
Нашел в сети рекомендации по написанию такого скрипта. Вот кусок кода

http = new ActiveXObject("MSXML2.XMLHTTP");
http.open("GET", "http://obstech.org/environment/latest_image.png", false);
http.send();
var ado = new ActiveXObject("ADODB.Stream");
ado.mode = 3;
ado.type = 1;
ado.open();
ado.Write(http.responseBody);
ado.SaveToFile("D:\\Temp\\allsky.png", 2);

Скрипт работает. Но только скачивает изображение один раз, при последующих запусках берет изображение из кеша.
Прочитал рекомендацию. Загружать по заведомо неправильной ссылке, а потом менять ее на правильную. Не помогло. При возврате все равно берет из кеша.
Каким образом форсировать скачивание по ссылке, а не из кеша?

Оффлайн MOHAX

  • *****
  • Сообщений: 791
  • Благодарностей: 35
  • Mi casa es la Vía Láctea
    • Сообщения от MOHAX
Re: Помогите с Java Script
« Ответ #1 : 24 Дек 2022 [11:42:59] »
Утилиты wget, curl не проще использовать?

Оффлайн eabrega

  • **
  • Сообщений: 69
  • Благодарностей: 5
  • Мне нравится этот форум!
    • Сообщения от eabrega
Re: Помогите с Java Script
« Ответ #2 : 31 Дек 2022 [13:41:14] »
Вы можете каждую ссылку сделать уникальной используя GET параметры, например так:

http = new ActiveXObject("MSXML2.XMLHTTP");
   http.open("GET", "http://obstech.org/environment/latest_image.png?value=randomValue", false);
......

где randomValue любое случайное число или последовательный инкремент (зависит от реализации). В таком случае каждая ссылка будет уникальной и не будет обнаруживаться в кеше.
P.S
При этом, вы должны отдавать себе отчет в том, что таким образом повышаете нагрузку на сервер. Кеш это палка о двух концах, и применяется не от хорошей жизни, так что не стоит злоупотреблять))))
« Последнее редактирование: 31 Дек 2022 [13:49:51] от eabrega »
https://astronav.ru - актуальная версия
https://stage.astronav.ru - тестовый стенд (мобильная версия не работает!!)

Оффлайн dr_magneto

  • *****
  • Сообщений: 1 619
  • Благодарностей: 100
  • Где мой "Дезинто"?
    • Сообщения от dr_magneto
    • https://www.last.fm/user/jyxx
Re: Помогите с Java Script
« Ответ #3 : 31 Дек 2022 [23:01:50] »
добавьте к ссылке http://obstech.org/environment/latest_image.png?timestamp, где timestamp - уникальное число, и перестанет скачиваться из кэша.

Оффлайн StasVАвтор темы

  • *****
  • Сообщений: 2 737
  • Благодарностей: 440
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от StasV
Re: Помогите с Java Script
« Ответ #4 : 16 Янв 2023 [13:15:44] »
Всем спасибо.
Проблему удалось решить так
http = new ActiveXObject("MSXML2.XMLHTTP");
http.open("GET", "http://obstech.org/environment/latest_image.png", false);
http.setRequestHeader("If-Modified-Since", Date(0));
http.send();
var ado = new ActiveXObject("ADODB.Stream");
ado.mode = 3;
ado.type = 1;
ado.open();
ado.Write(http.responseBody);
ado.SaveToFile(SKYFLATDIR+"\\Allsky1.png", 2);
http.abort();

Однако, через некоторое время win 7 перестало работать вообще. пишет нет доступа. При этом доступ к файлу из браузера есть. На win 10 вообще не запускается. Пишет нет компонента.
Наверное, и правда, лучше вызывать внешнюю утилиту, которая скопирует файл

Оффлайн StasVАвтор темы

  • *****
  • Сообщений: 2 737
  • Благодарностей: 440
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от StasV
Re: Помогите с Java Script
« Ответ #5 : 16 Янв 2023 [14:50:16] »
Ламерский, вероятно вопрос, но как правильно написать запрос
C:\Users\User>curl -O https://obstech.org/environment/latest_image.png
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - Функция отзыва не смогла произвести проверку отзыва для сертификата.

Если меняю https на http, то закачивает фал пустой 1КБ

Оффлайн Shandrik

  • *****
  • Сообщений: 24 126
  • Благодарностей: 1177
  • Счастье для всех даром!..
    • Сообщения от Shandrik
Re: Помогите с Java Script
« Ответ #6 : 16 Янв 2023 [14:56:27] »
У меня нормально скачало картинку.
"Иметь, а не быть" - главнейший тезис гниения! (с) Юдин

Где сойдутся воедино
Человек и то, чем был он...

Оффлайн StasVАвтор темы

  • *****
  • Сообщений: 2 737
  • Благодарностей: 440
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от StasV
Re: Помогите с Java Script
« Ответ #7 : 16 Янв 2023 [15:13:43] »
У меня нормально скачало картинку.
А запрос как у меня? curl -O https://obstech.org/environment/latest_image.png

Оффлайн MOHAX

  • *****
  • Сообщений: 791
  • Благодарностей: 35
  • Mi casa es la Vía Láctea
    • Сообщения от MOHAX
Re: Помогите с Java Script
« Ответ #8 : 16 Янв 2023 [15:37:56] »
Без ошибок отрабатывает, но у меня линукс. Попробуйте опцию
--ssl-no-revoke
      (Schannel) This option tells curl to disable certificate revocation checks.  WARNING: this option loosens the SSL security, and by using  this  flag
      you ask for exactly that.
либо другие SSL-опции.

Оффлайн Shandrik

  • *****
  • Сообщений: 24 126
  • Благодарностей: 1177
  • Счастье для всех даром!..
    • Сообщения от Shandrik
Re: Помогите с Java Script
« Ответ #9 : 16 Янв 2023 [17:47:50] »
У меня нормально скачало картинку.
А запрос как у меня? curl -O https://obstech.org/environment/latest_image.png
Да, как у Вас. 10-я винда. Картинка открывается.
"Иметь, а не быть" - главнейший тезис гниения! (с) Юдин

Где сойдутся воедино
Человек и то, чем был он...

Оффлайн StasVАвтор темы

  • *****
  • Сообщений: 2 737
  • Благодарностей: 440
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от StasV
Re: Помогите с Java Script
« Ответ #10 : 17 Янв 2023 [09:48:38] »
Версия стояла не последняя curl.  Если  качать с сайта последнюю и прописать путь к бинарнику, все работает
C:\Temp\curl -o C:\Temp\image.png  https://obstech.org/environment/latest_image.png
Теперь буду разбираться, как прописать в скрипте вызов curl с командной строкой

Оффлайн dr_magneto

  • *****
  • Сообщений: 1 619
  • Благодарностей: 100
  • Где мой "Дезинто"?
    • Сообщения от dr_magneto
    • https://www.last.fm/user/jyxx
Re: Помогите с Java Script
« Ответ #11 : 17 Янв 2023 [15:02:24] »
не большой спец в javascript, но подозреваю, что с curl он не справится
у вас всë та же проблема, что картинка загружается из локального кэша? я вам предложил решение, которое должго работать, пробовали? добавить к адресу на картинку символ ? и уникальный счетчик

Оффлайн StasVАвтор темы

  • *****
  • Сообщений: 2 737
  • Благодарностей: 440
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от StasV
Re: Помогите с Java Script
« Ответ #12 : 17 Янв 2023 [18:25:36] »
не большой спец в javascript, но подозреваю, что с curl он не справится
у вас всë та же проблема, что картинка загружается из локального кэша? я вам предложил решение, которое должго работать, пробовали? добавить к адресу на картинку символ ? и уникальный счетчик
Да, я решил проблему. Работает.
Но столкнулся с другой. Отказ в доступе на семерке. На десятке вообще не работает. проблема с библиотекой

Оффлайн StasVАвтор темы

  • *****
  • Сообщений: 2 737
  • Благодарностей: 440
  • Награды Неоднократный победитель конкурса астрофото
    • Сообщения от StasV
Re: Помогите с Java Script
« Ответ #13 : 17 Янв 2023 [18:28:19] »
Разобрался как запускать Curl из под ACP. В общем все стандартно. Запуск внешней программы с командной строкой. получилась вот такая функция
function GetAllSkyImage(ImageName){
var TaskID;
FSO = new ActiveXObject("Scripting.FileSystemObject");
if (FSO.FileExists(ImageName)) FSO.DeleteFile (ImageName);
try {
TaskID = Util.ShellExecAdmin("D:\\Curl\\curl", "-o " + ImageName + " https://obstech.org/environment/latest_image.png",1);
}
catch (ex) {
        Console.PrintLine("Exec: " + ex.message);
return (false);
}
if (Util.IsTaskActive (TaskID)) Console.PrintLine ("Curl is running.... Waiting task to terminate");
while (Util.IsTaskActive (TaskID)){
Util.WaitForMilliseconds(300);
}
if (FSO.FileExists(ImageName)){
var f=FSO.GetFile(ImageName);
var Imagesize= f.size;
if (f.size>1000000){
Console.PrintLine("All Sky Camera image downloading complite");
return (true);
}else {
Console.PrintLine("All Sky Camera image file size problem");
return (false);
}
}else{
Console.PrintLine("All Sky Camera image downloading problem ");
return (false);
}
}