Есть документация SDK для синхронизации с ПО Макроскоп распознавание номеров. мне нужно получать события распознавания онлайн. События можно получать в JSON-формате в «бесконечном» HTTP-соединении. Для этого
необходимо выполнить следующий запрос:
http://127.0.0.1:8080/event?login=root&password=&responsetype=json
При попытке сделать такой запрос из 1С - 1С зависает, т.к. считает, что результатом должен быть скачанный файл, пытается его скачать, но никогда не скачает.
Так же себя ведет и браузер Explorer

При запуске из браузера Chrome получаю бесконечный ответ в текстовом виде:

{
 "EventId" : "c9d6d086-c965-4cf8-aef6-85b3894e3a4a",
 "Timestamp" : "26.02.2020 07:38:47",
 "EventDescription" : "Обнаружен автономер",
 "IsAlarmEvent" : "False",
 "ChannelId" : "6ca6fb85-25d0-4108-8e5c-4ed4f485a0ad",
 "ChannelName" : "Камера 1",
 "Comment" : "Н111НВ799",
 "IsIdentified" : "False",
 "plateText" : "Н111НВ799",
 "Speed" : "0",
 "Reliability" : "81,0176315307617",
 "lastName" : "",
 "firstName" : "",
 "patronymic" : "",
 "carbrand" : "",
 "carcolor" : "",
 "additionalInfo" : "",
 "groups" : "",
 "direction" : ["Unknown"],
 "Numberplate" : "Н111НВ799"
}
{
 "EventId" : "e9e7a69c-7ee2-3fee-a530-9f8a88124fcc",
 "Timestamp" : "26.02.2020 07:38:54",
 "EventDescription" : "",
 "IsAlarmEvent" : "False",
 "ChannelId" : "00000000-0000-0000-0000-000000000000",
 "ChannelName" : "",
 "Comment" : "KeepAlive"
}

Вероятно мне нужен промежуточный инструмент, который будет обрабатывать этот поток данных, отсекая пустые события keepAlive, а в 1С методом Get запроса, например, отправлять распознанный номер.
Кто-то сталкивался с подобным вопросом? Есть идеи как это можно реализовать?
В итоге мне все это нужно, чтобы отображать на табло текущий распознанный номер. Можно и без 1С все решить, напрямую отправлять POST запрос в табло с номером автомобиля.

пробовала через powershell, но он обрабатывает подобный запрос путем скачивания файла потока.
---
Можете на питончике сделать вечный цикл, внутри request.session, дальше проверка на соединение и получение данных. Если соединение свалилось (а обычно разные промежуточные сервера могут сбрасывать соединение через 30 сек, например - прокси там всякие) - снова его поднимать.

А можно, полагаю, и как-то так:

```1c
    import requests
    import json

    r = requests.get('http://ххххххх.уууу/оооо.json',
    stream=True)

    for line in r.iter_lines():
    if line: # filter out keep-alive new lines
    ...
```
---
так вы можете поставить в 1с чтобы результатом была строка... а насчет бесконечного соединения - интересно посмотреть ссылку на СДК если оно открытое, что имеется ввиду под бесконечным хттп соединением, никогда в своей жизни такого не встречал, любой запрос всегда конечен.. или там схема передатчик передает, а считыватель что успел то считал)
---
имеется в виду TCP-соединение, которое не разрывается и остается открытым. Это помогает экономить ресурсы если с одним и тем же хостом нужно постоянно обменитьвася данными по http.

Почитайте что такое keep-alive в http
---
вот ссылка на SDK, пункт 4.3
https://macroscop.com/media/4684/download/Macroscop_SDK_Guide_ru.pdf?v=1&inline=1
---
а что ж вы сдк не сначала читаете)
в самом начале написано, что в качестве среды разработки предполагается использование
Microsoft Visual Studio.
сдк предлагает писать плагины как наследники класса
именно в эти наследники и пойдет информация с http соединения, вероятно это и есть тот промежуточный инструмент который вам нужен

а так что касается "бесконечного" http 1с как тут писали не разрывает соединение если таймаут = 0 при его создании, но это не то что вам нужно, разбить поток данных на отдельные json 1с не сможет, 1с читает пока идет информация

1с с http так как написано в сдк работать не сможет, он работает как браузер - принимает все что в него лезет, не сможет анализировать на транспортном уровне данные между заголовками http
---
Попробуйте открыть через встроенный браузер и парсить результат.
---
Кстати да, работает в динамике, по крайней мере на 15й платформе не ждет полной загрузки.

```1c
    &НаКлиенте
    Процедура Браузерр(Команда)
    АдресДляПоляХТМЛДокумента = "http://geek-nose.com";
    ПодключитьОбработчикОжидания("Чилдрен", 0.1, Истина);
    КонецПроцедуры
    &НаКлиенте
    Процедура Чилдрен()
    Сообщить ("Знаков Чилдрен :" + СтрДлина(Элементы.ПолеХТМЛДокумента.Документ.children[0].textContent));
    ПодключитьОбработчикОжидания("Чилдрен", 0.1, Истина);
    КонецПроцедуры
```

Вывод сообщений:
Знаков Чилдрен :0
Знаков Чилдрен :4 795
Знаков Чилдрен :29 483
Знаков Чилдрен :47 254
Знаков Чилдрен :48 927
---
Напрямую работать с открытыми http-соединениями в 1С нельзя. Встроенных средств работы с сетевыми потоками нет. Вам нужно постоянно делать запрос на получение новой порции данных. И обязательно ставьте таймаут, без него столкнетесь с зависанием при ожидании ответа.

Если есть в SDK возможность получать данные НЕ в реальном времени (например, получать данные за какой-то промежуток времени) - лучше использовать ее. т.е. не ждать пока ПО пришлет новые данные, а каждую минуту отправлять запрос "дай мне данные за прошедшую минуту".

Поддерживает ли SDK Макроскопа веб-сокеты? Если да - возьмите компоненту работы с веб-сокетами в 1С и интегрируйтесь через нее

В крайнем случае, если ничего не поможет, сделайте прокси веб-сервис-обертку на том языке, который поддерживает работу с открытым соединением, орашивайте его на предмет новых данных с какой-то периодичностью.
---
Напрямую работать с открытыми http-соединениями в 1С нельзяЧто Вы имеете в виду? Соединение в 1С можно открыть один раз и делать через него несколько запросов. Соединение по умолчанию создается как keep-alive в HTTP 1.1, и эска умеет его держать в объекте ХТТПСоединение = Новый HTTPСоединение(..). Другое дело, когда в ответе сервера нет признака, что ответ законченный.
---
да, действительно сформулировал я неудачно. То что 1С держит соединение открытым - внутренняя особенность, оптимизация объекта HTTPСоединение, управлять этим во встроенном языке мы не можем. Но это не то что нужно спрашивающему.

Я имел в виду, что используя HTTPСоединение нельзя открыть соединение и прослушивать его как поток, в режиме реального времени, ожидая новую порцию данных. Именно это требуется топикстартеру
---
работать не в реальном времени нет смысла, мне нужно отобразить номер автомобиля который подъехал и вспомогательную информацию по его лицевому счету, если требуется (например сообщить, что у него задолженность по оплате)
Макроскоп других вариантов не предоставляет
---
в реальном времени получать данные в платформе, открыв соединение и постоянно получая из него данные, к сожалению, невозможно.
Либо вы часто делаете запросы в цикле на стороне 1С, либо сторонняя программа присылает в 1С данные (через веб-сервисы, Odata и т.п.)
---
В крайнем случае, если ничего не поможет, сделайте прокси веб-сервис-обертку на том языке, который поддерживает работу с открытым соединением, орашивайте его на предмет новых данных с какой-то периодичностью.

пока я прорабатываю версию php + curl
curl умеет прослушивать поток, php может его обработать, отсекая пустые данные и отправлять get запрос в 1С, передавая номер авто и номер точки прохода.
Нашла сообщения на форумах, что это должно работать. Сегодня буду тестировать.
---
Сообщение было скрыто модератором.
---
а какова должна быть частота опроса Макроскопа? и каков событийный механизм должен быть в 1С?
регламентное задание с интервало в n секунд или обработчик ожидания? с сервера запрос или с клиента?
Если с клиента, то можно ВК написать и вызывать внешнее событие
Если с сервера, то все равно придется прокладку писать и хттп сервис поднимать...
---
у меня http сервис для этого есть. планирую, при появлении машины на него отправляется GET запрос с номером авто и точкой прохода.
мне нужно, чтобы какая-то программа/сервис слушал это бесконечное соединение от макроскоп и создавал GET запрос на мой HTTP сервис при появлении машины.
---
Можете на питончике сделать вечный цикл, внутри request.session, дальше проверка на соединение и получение данных. Если соединение свалилось (а обычно разные промежуточные сервера могут сбрасывать соединение через 30 сек, например - прокси там всякие) - снова его поднимать.

А можно, полагаю, и как-то так:

```1c
    import requests
    import json

    r = requests.get('http://ххххххх.уууу/оооо.json',
    stream=True)

    for line in r.iter_lines():
    if line: # filter out keep-alive new lines
    ...
```
---
Попробовала ваш вариант с python - все получилось. Спасибо за идею.
---
Обратите внимание на https://infostart.ru/public/1161011/ , кажется это именно то что для вас нужно