Имя: Пароль:
1C
1C 7.7
v7: Поделитесь опытом получения файла по https
,
0 Sam1C
 
26.03.19
11:22
Какие есть способы получить файл и сохранить на диске по веб ссылке? Пробую:
    XMLHTTP = CreateObject("Microsoft.XMLHTTP"); //CreateObject("WinHttp.WinHttpRequest.5.1");
    XMLHTTP.Open("GET",url,0);  
    Попытка
        XMLHTTP.Send();
    Исключение
        Сообщить("Ошибка отправки (Send) возможно нет подключения к интернету:" + ОписаниеОшибки(),"!");
        Возврат;
    КонецПопытки;
    ADOStream = CreateObject("ADODB.Stream");
    ADOStream.Type = 1;
    ADOStream.Open();
    ADOStream.Write(XMLHTTP.responseBody);    
    ADOStream.SaveToFile (Путь + "1.dat", 2);

На строке ADOStream.Write(XMLHTTP.responseBody) -  пишет Тип переменой не поддерживается
1 belchOnokZ
 
26.03.19
11:42
Недавно была проблема, решила сохранить рецепт http://woman365.ru/recipes/kak-solit-volnushki/  Попробовала получилось.
2 Garykom
 
гуру
26.03.19
11:49
curl или ВК не проще?
3 Sam1C
 
26.03.19
11:49
(2) Не знаю проще или нет, а есть пример?
4 Sam1C
 
26.03.19
11:51
(1) Это что за спам?
5 belchOnokZ
 
26.03.19
11:52
Почему спам?
6 Mikeware
 
26.03.19
11:54
(5) а что тогда?
7 Djelf
 
26.03.19
12:14
(0) ADOStream.Write(XMLHTTP.responseBody);
Ты хотел записать пустое значение потока в бинарном виде в ответ XMLHTTP? Странно что не получилось.
Используй Read или ReadText.
8 Ёпрст
 
26.03.19
12:16
(5) ого, боты еще и на вопросы научились отвечать правильно..!
9 Sam1C
 
26.03.19
12:33
(7) Тут неверно скинул на форум сори, стоит Read в рабоче коде, но проблема именно в XMLHTTP.responseBody, не работает даже если так "а = XMLHTTP.responseBody" Тип переменой не поддерживается
10 Djelf
 
26.03.19
12:51
А XMLHTTP.status после получения данных у тебя какой? Должно быть 200.
11 Sam1C
 
26.03.19
13:41
(10) да 200
12 Djelf
 
26.03.19
14:00
(11) А... не responseBody, а ADOStream.ReadText(XMLHTTP.responseText)
А с responseBody заворачивай все в MSScriptControl.ScriptControl, иначе не получится.
13 trad
 
26.03.19
14:12
(12) +

//*******************************************
Процедура СохранитьВФайл(http, ИмяФайла)
    
    Скрипт = СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.language = "vbscript";
    
    stream = CreateObject("ADODB.Stream");
    stream.Mode = 3;
    stream.Type = 1;
    stream.Open();
    
    Скрипт.AddObject("stream",stream);
    Скрипт.AddObject("http",http);
    Скрипт.Eval("stream.Write(http.responseBody)");
    
    stream.SaveToFile(ИмяФайла, 2);
    
КонецПроцедуры


//*******************************************
Процедура Сформировать()

    http = СоздатьОбъект("Msxml2.ServerXMLHTTP");
    http.open("GET", "http://www.toool.ru/img_resized/850_640/136/136397/00000030236_430045106050.jpg";, 0);
    http.send();
    Если http.status = 200 Тогда
        СохранитьВФайл(http, "C:\1.jpg");
    КонецЕсли;
    
КонецПроцедуры
14 Sam1C
 
26.03.19
14:14
(12) (13) Спасибо  завернул все MSScriptControl.ScriptControl, все взлетело
15 Sam1C
 
26.03.19
14:15
(12) Кстати надо использовать метод Write, а не Read это к (7), в (0) правильный код
16 Sam1C
 
26.03.19
14:17
trad, а чем лучше использовать Msxml2.ServerXMLHTTP, вместо Microsoft.XMLHTTP или просто дело вкуса?
17 trad
 
26.03.19
14:40
(16) Сложно ответить, больше дело привычки наверно.
Просто давно где-то в доках MS читал что ServerXMLHTTP в отличие от XMLHTTP построен на более современных библиотеках, вроде как надежнее и безопаснее.
Оттуда и повелось
18 Sam1C
 
26.03.19
15:48
(17) Понял, спс