Имя: Пароль:
1C
 
POST запрос в 1с 8.2 на видеорегистратор
0 Nikname232
 
27.07.17
14:23
Всем привет. Хочу передать данные видеорегистратору через 1с по POST запросу.
вот код

Процедура ОтправитьТекст ()
    Сервер = "http://192.168.1.36";;
    Ресурс = "ISAPI/ContentMgmt/InputProxy/channels/1/video/overlays/text/1";
HTTP =  Новый HTTPСоединение("http://192.168.1.36",80,"admin","admin";,,Истина);
ФайлЗапроса = ПолучитьИмяВременногоФайла();   
ТелоЗапроса = ПолучитьТелоЗапроса();
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.УстановитьТекст(ТелоЗапроса);          
ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.ANSI);
ФайлОтправки = Новый Файл(ФайлЗапроса);
РазмерФайлаОтправки = XMLСтрока(ФайлОтправки.Размер());
ФайлРезультата = ПолучитьИмяВременногоФайла();
 
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Length", РазмерФайлаОтправки);
ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс,
                           ФайлРезультата, ЗаголовокHTTP);
ТекстовыйФайлОтвет = Новый ТекстовыйДокумент;
ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8);
СтрокаОтветСервера = ТекстовыйФайлОтвет.ПолучитьТекст();
КонецПроцедуры


Функция ПолучитьТелоЗапроса ()
ЗапросТекст = "?xml version=""1.0"" encoding=""UTF-8"" ?>
|<TextOverlay version=""1.0"" xmlns=""http://www.hikvision.com/ver20/XMLSchema"">;
|<id>1</id>
|<enabled>true</enabled>
|<positionX>0</positionX>
|<positionY>544</positionY>
|<displayText>TEST</displayText>
|</TextOverlay>";        
Возврат ЗапросТекст;    
КонецФункции


Выдает ошибку :
{Форма.Форма.Форма(75)}: Ошибка при вызове метода контекста (ОтправитьДляОбработки)
HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс,
по причине:
Ошибка работы с Интернет:  Couldn't resolve host name

Кто нибудь сталкивался с такой проблемой?
1 Волшебник
 
модератор
27.07.17
14:26
обычный пинг работает?
2 Nikname232
 
27.07.17
14:29
только проверил, да работает. (1)
3 Юрий Лазаренко
 
27.07.17
14:29
Сервер = "http://192.168.1.36";;;
попробуй
  Сервер = "192.168.1.36";;
4 dezss
 
27.07.17
14:29
ОтправитьДляОбработки(<HTTPЗапрос>, <ИмяВыходногоФайла>), вроде ж 2 параметра, а не 4.

(2) а телнет можешь сделать?
5 Nikname232
 
27.07.17
14:29
странно, но почему то в отладчике на HTML.сервер указано просто "html" и строковом виде.
6 Юрий Лазаренко
 
27.07.17
14:29
без http://
7 Nikname232
 
27.07.17
14:30
(3) да, уже делал.
8 Волшебник
 
модератор
27.07.17
14:34
Как вариант, антивирус рубит интернет-трафик от 1С
9 Nikname232
 
27.07.17
14:36
(4) нет, через telnet не подключается
10 dezss
 
27.07.17
14:37
Народ, а как это будет работать?

HTTP.ОтправитьДляОбработки(ФайлЗапроса, Ресурс,

                           ФайлРезультата, ЗаголовокHTTP);
Там жеж 2 параметра, первый из которых HTTPЗапрос.
Или на какой-то версии 1с добавились варианты?
(9) вот и ответ...ты не можешь по этому порту достучаться
11 Nikname232
 
27.07.17
14:38
(8) антивирус отключен. и брэндмауэр уже тоже
12 dezss
 
27.07.17
14:38
(11) а сам регистратор по какому порту принимает подключения?
попробуй 8080
13 Garykom
 
гуру
27.07.17
14:39
(0) Нет не сталкивались ибо у нас СП есть и мы читать умеем.

Могу продать СП (дорого) и даже научить читать (это ваще неприлично дорого будет стоить).
14 Nikname232
 
27.07.17
14:40
(12) Регистратор по http - 80 порт а https - 443, они активны, проверил
15 dezss
 
27.07.17
14:41
(14) как проверил?
первая ж проверка - это постучаться туда по телнет...если не удается достучаться, то фиг че выйдет...
16 dezss
 
27.07.17
14:43
(15) хотя пох на это пока...
он же у тебя имя не может разрешить...
17 Nikname232
 
27.07.17
14:44
(15) я тупанул.
серез телнет подключается все.
вместо пробела ставил двоеточие
18 dezss
 
27.07.17
14:46
(17) молодец)))
а теперь объясни где нашел такое описание ОтправитьДляОбработки с 4-мя параметрами. СП показывает другое.
19 dezss
 
27.07.17
14:46
кста, а пробовал телнет как
telnet http://192.168.1.36 80
или
telnet 192.168.1.36 80
20 Nikname232
 
27.07.17
14:48
(19) telnet 192.168.1.36 80
21 Nikname232
 
27.07.17
14:48
я и сервер изменил на 192.168.1.36 без  http:// (19)
22 dezss
 
27.07.17
14:51
Насколько мне помнится, когда делаешь ОтправитьДляОбработки, то к серверу присобачивается ресурс, к кот корому на этом сервере пытаешься обратиться...и вот в качестве ресурса он у тебя берет хз что...
23 Nikname232
 
27.07.17
14:57
(22) это путь к настройкам текстового наложения по каналу.
если я этот путь пропишу в браузере, то выдает вот это

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<TextOverlay xmlns="http://www.std-cgi.com/ver20/XMLSchema"; version="1.0">
<id>1</id>
<enabled>false</enabled>
<positionX>32</positionX>
<positionY>96</positionY>
<displayText>ТЕСТ</displayText>
</TextOverlay>
24 dezss
 
27.07.17
15:15
(23) Еще раз.
Покажи синтаксис ОтправитьДляОбработки, который ты пытаешься использовать. Я не нашел синтаксиса с 4 параметрами.
25 arsik
 
гуру
27.07.17
15:46
(24) У него платформа старая. В 8.1 как раз 4 параметра
26 arsik
 
гуру
27.07.17
15:47
(0) Попробуй через "Получить()"
27 Garykom
 
гуру
27.07.17
15:47
(25) тема: "POST запрос в 1с 8.2 на видеорегистратор"
28 Nikname232
 
29.07.17
12:01
все бьюсь с этим POST запросом.
На данном этапе нашел код в интернете и теперь код такой:

ТелоPOSTЗапроса = "<?xml version='1.0' encoding='utf-8'?><VideoOverlay><normalizedScreenSize><normalizedScreenWidth>704</normalizedScreenWidth><normalizedScreenHeight>576</normalizedScreenHeight></normalizedScreenSize><attribute><transparent>false</transparent><flashing>false</flashing></attribute><fontSize>2</fontSize><TextOverlayList><TextOverlay><id>1</id><enabled>true</enabled><displayText>Привет11111</displayText><positionX>32</positionX><positionY>96</positionY></TextOverlay><TextOverlay><id>2</id><enabled>true</enabled><displayText>Салам</displayText><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>3</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>4</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>5</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>6</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>7</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>8</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay></TextOverlayList><DateTimeOverlay><enabled>true</enabled><positionX>16</positionX><positionY>32</positionY><dateStyle>DD-MM-YYYY</dateStyle><timeStyle>24hour</timeStyle><displayWeek>true</displayWeek></DateTimeOverlay><channelNameOverlay><enabled>true</enabled><positionX>512</positionX><positionY>512</positionY></channelNameOverlay></VideoOverlay>";


//POST-запрос на сервер-приёмник
СерверПриемник = "192.168.1.36"; //имя сервера без протокола (http) и порта
АдресСтраницыНаСервере = "/ISAPI/ContentMgmt/InputProxy/channels/1/video/overlays/text"; //

ЗаголовкиHTTP = Новый Соответствие;
//ЗаголовкиHTTP.Вставить("DeviceStatus version=" + ""1.0"", "xmlns=" + """http://www.hikvision.com/ver20/XMLSchema""";);
//ЗаголовкиHTTP.Вставить("Accept-Encoding", "gzip, deflate");
//ЗаголовкиHTTP.Вставить("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3");
//ЗаголовкиHTTP.Вставить("Authorization", "Basic YWRtaW46YWRtaW4xMjM0");
//ЗаголовкиHTTP.Вставить("Connection", "keep-alive");
//ЗаголовкиHTTP.Вставить("Content-Length", "1703");
ЗаголовкиHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
//ЗаголовкиHTTP.Вставить("Cookie", "language=ru; sdMarkMenu=4%3Aimage; sdMarkTab_1_0=0%3AsettingBasic; sdMarkTab_4=1%3Aosd");
//ЗаголовкиHTTP.Вставить("Host", "192.168.1.36");
//ЗаголовкиHTTP.Вставить("If-Modified-Since", "0");
//ЗаголовкиHTTP.Вставить("Referer", "http://192.168.1.36/doc/page/config.asp";);
//ЗаголовкиHTTP.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0");
//ЗаголовкиHTTP.Вставить("X-Requested-With", "XMLHttpRequest");

Таймаут = 120;
//SSL =  Истина;//?(ЗащищенноеСоединение, Новый ЗащищенноеСоединениеOpenSSL(), Неопределено);
НТТР = Новый HTTPСоединение(СерверПриемник,,"admin","admin1234",,Таймаут,);

Попытка
    //Формируем HTTP запрос
    ЗапросHTTP = Новый HTTPЗапрос(АдресСтраницыНаСервере, ЗаголовкиHTTP);
    ЗапросHTTP.УстановитьТелоИзСтроки(ТелоPOSTЗапроса); //Устанавливает строку, из которого будет прочитано тело POST-запроса.

    //Ответ от сервера получим в возвращаемом значении типа HTTPОтвет
    ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP);
Исключение
    ТекстСообщения = НСтр("ru = 'Неудачная попытка соединения с '")  + СерверПриемник + ": " + ОписаниеОшибки();
    //ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
    Возврат;
КонецПопытки;
СтрокаОтветаСервера = ОтветHTTP.ПолучитьТелоКакСтроку();




В Мозиле через консоль словил POST запрос, на основании которого пытаюсь делать подобный на 1с.

POST запрос:  <?xml version='1.0' encoding='utf-8'?>
<VideoOverlay><normalizedScreenSize><normalizedScreenWidth>704</normalizedScreenWidth><normalizedScreenHeight>576</normalizedScreenHeight></normalizedScreenSize><attribute><transparent>false</transparent><flashing>false</flashing></attribute><fontSize>2</fontSize><TextOverlayList><TextOverlay><id>1</id><enabled>true</enabled><displayText>Привет</displayText><positionX>32</positionX><positionY>96</positionY></TextOverlay><TextOverlay><id>2</id><enabled>true</enabled><displayText>Салам</displayText><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>3</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>4</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>5</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>6</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>7</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>8</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay></TextOverlayList><DateTimeOverlay><enabled>true</enabled><positionX>16</positionX><positionY>32</positionY><dateStyle>DD-MM-YYYY</dateStyle><timeStyle>24hour</timeStyle><displayWeek>true</displayWeek></DateTimeOverlay><channelNameOverlay><enabled>true</enabled><positionX>512</positionX><positionY>512</positionY></channelNameOverlay></VideoOverlay>

на адрес: http://admin:[email protected]/ISAPI/System/Video/inputs/channels/1/overlays

Заголовки такие: пришлось скрин сделать, иначе не получается. https://ibb.co/mdDcFQ

И ответ в Мозиле следующий:
<?xml version="1.0" encoding="UTF-8" ?>
<ResponseStatus version="1.0" xmlns="urn:psialliance-org">
<requestURL>/ISAPI/System/Video/inputs/channels/1/overlays</requestURL>
<statusCode>1</statusCode>
<statusString>OK</statusString>
<subStatusCode>ok</subStatusCode>
</ResponseStatus>



В моем случае в 1С ответ приходит такой:

<?xml version="1.0" encoding="UTF-8" ?>
<ResponseStatus version="1.0" xmlns="urn:psialliance-org">
<requestURL>/ISAPI/ContentMgmt/InputProxy/channels/1/video/overlays/text</requestURL>
<statusCode>4</statusCode>
<statusString>Invalid Operation</statusString>
<subStatusCode>methodNotAllowed</subStatusCode>
</ResponseStatus>


Подскажите пожалуйста, что я не так делаю. Направьте в правильное русло. Спасибо.
29 Nikname232
 
29.07.17
16:01
up
30 Nikname232
 
29.07.17
21:14
Итак, господа, все работает, спасибо кто содействовал, если кому пригодится код ниже:

Процедура ОтправитьТекст ()
Сервер = "192.168.1.36";
Ресурс = "ISAPI/System/Video/inputs/channels/1/overlays";
Порт = 80;
HTTP =  Новый HTTPСоединение(Сервер,Порт,"admin","admin1234");
ФайлЗапроса = ПолучитьИмяВременногоФайла();   
ТелоЗапроса = ПолучитьТелоЗапроса("ТЕСТ1");
ТекстовыйФайл = Новый ТекстовыйДокумент;
ТекстовыйФайл.УстановитьТекст(ТелоЗапроса);          
ТекстовыйФайл.Записать(ФайлЗапроса, КодировкаТекста.UTF8);
ФайлОтправки = Новый Файл(ФайлЗапроса);
ФайлРезультата = ПолучитьИмяВременногоФайла();
HTTP.Записать(ФайлОтправки.ПолноеИмя, Ресурс);
КонецПроцедуры


Функция ПолучитьТелоЗапроса (ИМЯ)
ЗапросТекст = "<?xml version='1.0' encoding='utf-8'?>
|<VideoOverlay><normalizedScreenSize><normalizedScreenWidth>704</normalizedScreenWidth>
|<normalizedScreenHeight>576</normalizedScreenHeight></normalizedScreenSize><attribute>
|<transparent>false</transparent><flashing>false</flashing></attribute><fontSize>2</fontSize>
|<TextOverlayList><TextOverlay><id>1</id><enabled>true</enabled><displayText>" + имя + "</displayText>
|<positionX>32</positionX><positionY>150</positionY></TextOverlay><TextOverlay>
|<id>2</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>3</id><enabled>false</enabled><displayText/><positionX>16</positionX><positionY>224</positionY></TextOverlay><TextOverlay><id>4</id><enabled>false</enabled><displayText/><positionX>352</positionX><positionY>96</positionY></TextOverlay><TextOverlay><id>5</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>6</id><enabled>false</enabled><displayText/><positionX>496</positionX><positionY>16</positionY></TextOverlay><TextOverlay><id>7</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay><TextOverlay><id>8</id><enabled>false</enabled><displayText/><positionX>0</positionX><positionY>0</positionY></TextOverlay></TextOverlayList><DateTimeOverlay><enabled>true</enabled><positionX>16</positionX><positionY>32</positionY><dateStyle>DD-MM-YYYY</dateStyle><timeStyle>24hour</timeStyle><displayWeek>true</displayWeek></DateTimeOverlay><channelNameOverlay><enabled>true</enabled><positionX>512</positionX><positionY>512</positionY></channelNameOverlay></VideoOverlay>";        
Возврат ЗапросТекст;    
КонецФункции
31 Nikname232
 
29.07.17
21:28
А теперь вопрос следующий, если я данный код запихну во внешнюю компоненту, то 1с думать будет? сейчас на данном этапе где-то 1 - 1,5 секунды 1с думает. как думаете?
32 Nikname232
 
30.07.17
11:19
Народ. Хелп
33 Сергиус
 
30.07.17
12:10
(31)Во внешней компоненте данный код тебе в любом случае придется переписывать
34 Nikname232
 
30.07.17
23:15
(33) Это я знаю. 1с когда передаст параметр для ВК, будет ждать завершения процесса во внешней компоненте, или после передачи сразу продолжит по свому коду?
35 Nikname232
 
30.07.17
23:16
Просто хочу понять, есть ли смысл заморачиваться с ВК.