Имя: Пароль:
1C
1С v8
Как с помощью WinHTTP можна получить фотографию в пользовательском режиме 1С
0 SherifSP
 
30.05.12
17:07
Как с помощью WinHTTP можна получить фотографию в пользовательском режиме 1С 8, по SSL соединению?
1 Vladal
 
30.05.12
17:25
Почитай книжку "Технологии интеграции 1СПрелдприятия"
2 SherifSP
 
30.05.12
17:33
Опробовал такой метод, v8: Клиентский сертификат для SSL соединения V8.2 сертификат не действителен, вот решил попробовать обойти его
3 SherifSP
 
30.05.12
17:34
Есть такой код, он отправляет файл, а как получить?
4 SherifSP
 
30.05.12
17:34
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
   WinHttp.Option(2,"Windows-1251");
   
   WinHttp.Open("POST","https://trade.informjust.ua",0);

   
   WinHttp.SetRequestHeader("Accept-Language", "ru");
   WinHttp.SetRequestHeader("Accept-Charset","Windows-1251");
   WinHttp.setRequestHeader("Content-Language", "ru");
   WinHttp.setRequestHeader("Content-Charset", "Windows-1251");
   WinHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=Windows-1251");
   
   ПараметрыПОСТ = "fruit3=apple777";
   
   WinHttp.Send(ПараметрыПОСТ);
   
   Текст = Новый ЗаписьТекста("C:\result.gif", КодировкаТекста.UTF8);
   Текст.ЗаписатьСтроку(WinHttp.ResponseText());
   Текст.Закрыть();
5 SherifSP
 
30.05.12
17:38
Такой метод, тоже ругается на сертификат(

 ПолеHTMLДокумента = ЭлементыФормы.ПолеHTMLДокумента;
   
 Объект = ПолеHTMLДокумента.Документ;

   КоллекцияКартинок = Объект.images;
   
   Для Каждого Элемент Из КоллекцияКартинок Цикл
       ИмяРесурсаКартинки = Строка(Новый УникальныйИдентификатор);

       
       ТипМайм = СокрЛП(Элемент.mimeType);
       
       // "Рисунок GIF", "Рисунок JPEG", 8 символов с пробелом слева.

       
       ПравыйКусок = Прав(ТипМайм, СтрДлина(ТипМайм) - 8);
       
       ТипКратко = НРег(ПравыйКусок);
       
       ИмяФайлаКартинки = КаталогСохранения + "\" + ИмяРесурсаКартинки
           + "." + ТипКратко;
       
       ГетЗапрос = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
       
       Если ИспользоватьПрокси Тогда
           ГетЗапрос.SetProxy(2
               , "192.168.0.1:8080");  // HTTPREQUEST_PROXYSETTING_PROXY

               
       КонецЕсли;        


       ГетЗапрос.SetTimeouts(10000, 10000, 10000, 10000);
       
       БазовыйУРЛ = Элемент.src;
       
       Хидер1 = "Content-Type";
       Хидер2 = "image/" + ТипКратко; // Тип рисунка.

       
       ГетЗапрос.Open("GET", БазовыйУРЛ, False); // Синхронный режим.

       ГетЗапрос.setRequestHeader(Хидер1, Хидер2);

       ГетЗапрос.Send();
       
       СтатусОтправки = ГетЗапрос.status;
       
       Если СтатусОтправки <> 200 Тогда
           Сообщить("Ошибка отправки запроса на: "
               + Элемент.src);
           Продолжить;    
       КонецЕсли;        
   
       Стрим = Новый COMОбъект("ADODB.Stream");
       Стрим.Mode = 3;
       Стрим.Type = 1;
       Стрим.Open();
       Стрим.Write(ГетЗапрос.responseBody);
       
       Стрим.SaveToFile(ИмяФайлаКартинки, 2);
       Стрим.Close();
       
   КонецЦикла;
6 SherifSP
 
30.05.12
17:50
Произошла исключительная ситуация (WinHttp.WinHttpRequest): Недопустимый или неправильный центр сертификации
7 SherifSP
 
30.05.12
17:51
Ругается на  ГетЗапрос.Send();
8 Vladal
 
30.05.12
17:52
Чесслово, пока не знаю. На следующей неделе буду соединять УТП с веб-мордой. Там тоже есть картинки.
9 oleg_km
 
30.05.12
17:58
SetOption смотри, буквально недавно обсуждалась эта проблема, набери поиск WinHTTP
10 Vladal
 
30.05.12
18:12
11 smaharbA
 
30.05.12
18:21
12 oleg_km
 
30.05.12
18:41
(10)(11) Ну видишь, опять для вас подсуетились
13 SherifSP
 
31.05.12
11:01
v8: Использование WinHTTP для отправки файла методом POST по https - интересно у него получилось осуществить данную задачу
14 SherifSP
 
31.05.12
11:01
Но он отправляет текст а не картинку
15 oleg_km
 
31.05.12
11:49
У WinHTTP есть метод получить результат в виде текста, а есть в виде Stream, который можно сохранить в бинарный файл
16 SherifSP
 
31.05.12
12:07
Вот такой код написал


WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
   WinHttp.Option(2,"Windows-1251");
   
   WinHttp.Open("POST","https://195.225.172.217:8080/screenshot/yUXnR42J?password=",0);
   
   
   WinHttp.SetRequestHeader("Accept-Language", "ru");
   WinHttp.SetRequestHeader("Accept-Charset","Windows-1251");
   WinHttp.setRequestHeader("Content-Language", "ru");
   WinHttp.setRequestHeader("Content-Charset", "Windows-1251");
   WinHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=Windows-1251");
   
   ПараметрыПОСТ = "fruit3=apple777";
   
   WinHttp.Send(ПараметрыПОСТ);
   
   ИмяФайлаКартинки = "C:\22.gif";
   
   Стрим = Новый COMОбъект("ADODB.Stream");
   Стрим.Mode = 3;
   Стрим.Type = 1;
   Стрим.Open();
   Стрим.Write(WinHttp.responseBody);
   
   Стрим.SaveToFile(ИмяФайлаКартинки, 2);
   Стрим.Close();

Ошибка:  {Форма.Форма.Форма(28)}: Ошибка при вызове метода контекста (Send)
   WinHttp.Send(ПараметрыПОСТ);
по причине:
Произошла исключительная ситуация (WinHttp.WinHttpRequest): Недопустимый или неправильный центр сертификации

Не знаю как с этим можно бороться, уже 4 день мучаюсь(
17 SherifSP
 
31.05.12
12:09
Как узнать параметры пост, или они для всех стандартные?
18 smaharbA
 
31.05.12
12:11
тебе же написано - ставь опции игнорирования сертификатов и  не умничай, никакого отличия твоего сабжа и (11) нету
19 SherifSP
 
31.05.12
13:21
WinHttp.Option(4,13056); Поставил, та же проблема (
20 smaharbA
 
31.05.12
13:22
(19) так опции не устанавливаются


//*******************************************
Функция ПолучитьОбертку()
   ХТМЛ = СоздатьОбъект("htmlfile");
   ХТМЛ.Open("text/html");
   //<-- Подготовим нужные методы
   ХТМЛ.Write("<script>
   |var ХТМЛ;
   |Опция=function(x,y,z){var ret=x.Option(y);if(z) x.Option(y)=z; return ret};
   |Записать=function(x,y){x.Write(y.responseBody())};
   |</script>");
   Док=ХТМЛ.documentElement.document;
   // Внедрение объекта Скрипта в самого себя, для сохранности контекста
   Док.script.ХТМЛ=ХТМЛ;
   // Все подготовке -->
   Возврат Док.script;
КонецФункции    // ПолучитьОбертку(Это)

//*******************************************
Процедура Сформировать()
   Это=ПолучитьОбертку();
   ХТТП = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
   
   ХТТП.Open("POST","https://195.225.172.217:8080/screenshot/yUXnR42J?password=",0);
   Это.Опция(ХТТП,2,"Windows-1251");
   Это.Опция(ХТТП,4,13056);
   
   
   ХТТП.SetRequestHeader("Accept-Language", "ru");
   ХТТП.SetRequestHeader("Accept-Charset","Windows-1251");
   ХТТП.setRequestHeader("Content-Language", "ru");
   ХТТП.setRequestHeader("Content-Charset", "Windows-1251");
   ХТТП.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=Windows-1251");
   
   ПараметрыПОСТ = "fruit3=apple777";
   
   ХТТП.Send(ПараметрыПОСТ);
   Сообщить(ХТТП.getAllResponseHeaders());
   ИмяФайлаКартинки = "C:\22.jpeg";
   
   Стрим = СоздатьОбъект("ADODB.Stream");
   Стрим.Mode = 3;
   Стрим.Type = 1;
   Стрим.Open();
   Это.Записать(Стрим,ХТТП);
   
   Стрим.SaveToFile(ИмяФайлаКартинки, 2);
   Стрим.Close();

КонецПроцедуры
21 SherifSP
 
31.05.12
13:32
СоздатьОбъект это переменная?
22 smaharbA
 
31.05.12
13:35
(21) это 7.7
23 smaharbA
 
31.05.12
13:36

//*******************************************
Функция ПолучитьОбертку()
   ХТМЛ = Новый COMОбъект("htmlfile");
   ХТМЛ.Open("text/html");
   //<-- Подготовим нужные методы
   ХТМЛ.Write("<script>
   |var ХТМЛ;
   |Опция=function(x,y,z){var ret=x.Option(y);if(z) x.Option(y)=z; return ret};
   |Записать=function(x,y){x.Write(y.responseBody())};
   |</script>");
   Док=ХТМЛ.documentElement.document;
   // Внедрение объекта Скрипта в самого себя, для сохранности контекста
   Док.script.ХТМЛ=ХТМЛ;
   // Все подготовке -->
   Возврат Док.script;
КонецФункции    // ПолучитьОбертку(Это)

//*******************************************
Процедура Сформировать()
   Это=ПолучитьОбертку();
   ХТТП = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
   
   ХТТП.Open("POST","https://195.225.172.217:8080/screenshot/yUXnR42J?password=",0);
   Это.Опция(ХТТП,2,"Windows-1251");
   Это.Опция(ХТТП,4,13056);
   
   
   ХТТП.SetRequestHeader("Accept-Language", "ru");
   ХТТП.SetRequestHeader("Accept-Charset","Windows-1251");
   ХТТП.setRequestHeader("Content-Language", "ru");
   ХТТП.setRequestHeader("Content-Charset", "Windows-1251");
   ХТТП.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=Windows-1251");
   
   ПараметрыПОСТ = "fruit3=apple777";
   
   ХТТП.Send(ПараметрыПОСТ);
   Сообщить(ХТТП.getAllResponseHeaders());
   ИмяФайлаКартинки = "C:\222.jpeg";
   
   Стрим = Новый COMОбъект("ADODB.Stream");
   Стрим.Mode = 3;
   Стрим.Type = 1;
   Стрим.Open();
   Это.Записать(Стрим,ХТТП);
   
   Стрим.SaveToFile(ИмяФайлаКартинки, 2);
   Стрим.Close();

КонецПроцедуры


Процедура КнопкаВыполнитьНажатие(Кнопка)
   // Вставить содержимое обработчика.
   Сформировать();
КонецПроцедуры
24 SherifSP
 
31.05.12
13:55
Спасибо большое, все получилось)
25 SherifSP
 
31.05.12
16:27
Подскажите как очистить поле HTML документа?
26 smaharbA
 
31.05.12
16:28
.innerHTML=""; ?

или что за поле ?
27 smaharbA
 
31.05.12
16:35
у инпутов есть валюе, у текстареи есть иннерТекст
28 SherifSP
 
31.05.12
16:38
ну вот получаю фотографию методом ЭлементыФормы.ПолеHTMLДокумента1.Перейти(Http//ya.ru);

Ввод адреса поцепил на поле ввода, сделал проверку Если Не ЗначениеЗаполнено(ЭлементыФормы.ПолеВвода1.Значение), тогда Возврат; Но когда отрабатывает это у меня остается предыдущая картинка, вот хочу очистить  ЭлементыФормы.ПолеHTMLДокумента1
29 smaharbA
 
31.05.12
16:40
ПолеHTMLДокумента1 - это что ? (восьмерку вообще не знаю)
скорее всего типа
ЭлементыФормы.ПолеHTMLДокумента1.innerHTML="";
30 SherifSP
 
31.05.12
16:44
Это Элемент управления
31 SherifSP
 
31.05.12
16:46
Такой как и Табличное поле, только со своим значение
32 smaharbA
 
31.05.12
17:00
на сколько вкуриваю, это именно не элемент управления (это адинес накрутило обертки), а именно обычный элемент хтмл
33 SherifSP
 
31.05.12
17:16
Ну да, как его очистить?
34 smaharbA
 
31.05.12
17:16
а иннерХТМЛ не срабатывает ?
35 SherifSP
 
31.05.12
17:17
Методом назад(); не получится так как у меня предыдущая фотка будит, а мне нужно чистое поле
36 SherifSP
 
31.05.12
17:17
Нет, пишет такого метода не существует
37 oleg_km
 
31.05.12
17:43
Может так: Перейти("about:blank");
38 SherifSP
 
31.05.12
17:49
(37) подошло, спс
39 smaharbA
 
31.05.12
17:53
установитьтекст ?
40 SherifSP
 
31.05.12
18:22
Нет Перейти("about:blank"); Перейти на чистую страницу
41 smaharbA
 
31.05.12
18:37
(40) это понятно, правильнее скорее будет
.Документ.body.innerHTML="";
типа такого (смысл - получить документ, а в нем уже приминять нормальные методы дома), абоутбланк вещь конечно не тяжелая, но может приводить и к висаку
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший