Автор | Сообщение |
|
Отправлено: 26.02.15 19:15. Заголовок: Можно обойтись без Telnet'a? Чистый http api, GET, POST?
Подскажите коллеги, а куда копать, чтобы подружить crestron с оборудованием, не поддерживающим telnet? Надо: 1) Отправить крестрону GET или POST запрос формата http://[ip_address_of_crestron]:[port]/?[some_key1]=[some_value1]&[some_key2]=[some_value2] 2) Получить от него осознанное действие. Например, включить свет. Прошу подсказать, возможен ли такой функционал и где почитать. Спасибо.
|
|
|
Ответов - 41
, стр:
1
2
3
All
[только новые]
|
|
|
Отправлено: 12.08.16 15:17. Заголовок: gosha Спасибо! Уже с..
gosha Спасибо! Уже смотрел, но вопрос у меня в другом: Как весь запрос (пример ниже) закинуть через контроллер? Сворачивание в одну строчку - не помогает POST /RPC2 HTTP/1.0 User-Agent: Frontier/5.1.2 (WinNT) Host: betty.userland.com Content-Type: text/xml Content-length: 181 <?xml version="1.0"?> <methodCall> <methodName>examples.getStateName</methodName> <params> <param> <value><i4>41</i4></value> </param> </params> </methodCall>
|
|
|
|
Отправлено: 12.08.16 22:02. Заголовок: Это не пример команд..
Это не пример команды в чистом виде это описание её обязательных или не очень параметров (хотя описание ближе к истинной команде, чем то что можно ввести в строку браузера, который добавит к ней еще всякой служебной инфы). Лучший способ подсмотреть Wireshark-ом пример одной из команд с рабочего варианта коммуникации. При этом символы \r\r смотреть в hex варианте (для Crestron \r\n интерпретируется иначе чем в WireShark. В Crestron \r\n заменить на \n) Скопировав целиком рабочую команду из Wireshark засовываем её в Simpl+ модуль Crestron (можно выкинуть аккуратно!! всякую чушь типа имени браузера, User-Agent и т.п.) Обрабатывайте эту команду как строковую переменную, меняя необходимые значения параметров и отправляйте через TCP_CLIENT на MCU. При этом неизменяемые части типа "POST /RPC2/..."и " HTTP/1.0\n" используете как строковые константы и лепите из них нужную полную строку команды через + заканчивая каждый параметр \n добавив в конце +"\n\n"; Можно видимо как тут советуют использовать внешний TCP client, но придется разбивать строки на части не длиннее 255 символов. Я всегда использовал внутренний в SIMPL+ TCP_CLIENT, чтоб не заморачиваться с длиной команды (а она получится достаточно длинная). Боюсь даже предположить, что это можно реализовать на Serial i/o только не используя SIMPL+.(почему смотри ниже) С большой долей вероятности, придется позаботится еще о расчете параметра Content-Length:xx\n Ведь он (длина команды) будет меняться динамически в зависимости от параметров команды. Если это поле использовать как константу всегда одинаковое (т.е. не пересчитывать длину или не использовать параметр вовсе) то сервер может и не принять такую команду вернув ошибку. Либо описывать все команды как константы (заменив лишь \r на \n) на все возможные варианты (перехватив только самые нужные). Но это не наш метод ).
|
|
|
|
| постоянный участник
|
|
|
Отправлено: 14.08.16 23:30. Заголовок: Ответ тут должен быт..
Ответ тут должен быть таким: можно, в соответствии с протоколами и синтаксисом.
|
|
|
|
Отправлено: 15.08.16 11:17. Заголовок: Вячеслав, Спасибо, з..
Вячеслав, Спасибо, за столь развернутый ответ, попробую написать модуль. По всей видимости у меня не были соблюдены "\n\" , в довесок команда больше 255 символов
|
|
|
|
Отправлено: 15.08.16 22:30. Заголовок: Только говоря про ..
Только говоря про \n я не имел ввиду параметры xml, я имел ввиду параметры POST запроса для http. Разметку xml по факту в перехваченном пакете. Отправляйте из приложения на ПК по возможности и ловите wireshark с фильтром ip.addr==IP_адрес_MCU Скопировать ПКМ на пакете Copy->as Printable Text. Но непечатные символы 0d 0a (тоже в wireshark .. или \r\n тоже в Crestron \n) придется добавить в строку Crestron как \x0d\x0a или \n Вам нужно все начиная с фразы POST и заканчивая .... (\n\n) если блок xml попадает в эти рамки. Иногда данные могут подставляться к конце пакета, уже за символами \n\n Длину (Content-length:) определяет видимо блок xml начиная от <? и заканчивая последней > включая непечатные символы (\x0d\x0a это два символа даже если вы их запишите как \n) Длину подставляемую после "Content-length: " легко посчитать применив штатные функции SIMPL+ LEN() и ITOA() Пример: command_length$=ITOA(len("<?......>")); В качестве значения для параметра "Host: " подставляйте IP адрес MCU.
|
|
|
|
Отправлено: 16.08.16 17:08. Заголовок: Вячеслав Еще раз огр..
Вячеслав Еще раз огромное спасибо! Вообщем, кусок simpl+, который заработал (вдруг кому понадобится): Push Call_to_Name1 { BodyLine1 = "\n\n"; BodyLineCMD1 = "<methodCall><methodName>participant.add</methodName><params><param><value><struct>"; BodyLineCMD2 = "<member><name>authenticationUser</name><value><string>admin</string></value></member><member><name>authenticationPassword</name><value><string>password</string></value></member>"; BodyLineCMD3 = "<member><name>conferenceName</name><value><string>666</string></value></member><member><name>participantName</name><value><string>andrei.movi</string></value></member>"; BodyLineCMD4 = "<member><name>address</name><value><string>shatov.movi</string></value></member></struct></value></param></params></methodCall>"; Body = BodyLineCMD1 +BodyLineCMD2 + BodyLineCMD3 +BodyLineCMD4 + BodyLine1; Header1 = "POST /RPC2 HTTP/1.1\n"; Header2 = "Connection: keep-alive\n"; MAKESTRING (Header3, "Content-Length: %d\n", LEN (Body)); MAKESTRING (Header4, "HOST: %s\n", MCU_IPAddr); Header5 = "Content-Type: text/html\n"; Header6 = "Accept-Encoding:\nUser-Agent:\nAuthorization:\n\n"; MCU_BODY_OUT = Header1+Header2+Header3+Header4+Header5+Header6+BodyLineCMD1; MCU_BODY_OUT = BodyLineCMD2; MCU_BODY_OUT = BodyLineCMD3; MCU_Body_OUT = BodyLineCMD4+BodyLine1; } Как видно, вывожу по строчкам весь код через внешний TCP\IP client, если коллеги подскажет, как использовать внутренний /*TCP_CLIENT tcpclient80 [20000]; - буду очень благодарен, сам как-то не осилил.
|
|
|
|
Отправлено: 16.08.16 19:48. Заголовок: AndreySh обратите вн..
AndreySh обратите внимания на цитата: | Header6 = "Accept-Encoding:\nUser-Agent:\nAuthorization:\n\n"; |
| это не верный формат запроса.
|
|
|
|
Отправлено: 17.08.16 11:23. Заголовок: Ale4ko А что Вас сму..
Ale4ko А что Вас смущает? 1. Если не заполнены поля с данными, то это "прихоть" MCU. хоть и с пустыми значениями, но строки Accept-Encoding: Authorization должны присутствовать, без них http запрос не обрабатывается и ответ с ошибкой 201 (operation failed) 2. Или же что команда записана в одну строку?
|
|
|
|
Отправлено: 17.08.16 14:16. Заголовок: Я бы все-таки убрал ..
Я бы все-таки убрал Connection: keep-alive, поменял Content-Type на text/xml, и посмотрел .pcap запроса, который дает 201
|
|
|
|
Отправлено: 18.08.16 08:52. Заголовок: gosha Позже попробую..
gosha Позже попробую проверить, сейчас уже такой возможности нет.
|
|
|
|
Отправлено: 18.08.16 09:54. Заголовок: AndreySh , два вопро..
AndreySh , два вопроса: 1. Речь о Codian? 2. Раз уж CP3, почему бы не делать все средствами S#? Решение упростится и ускорится в разы.
|
|
|
|
|
Отправлено: 18.08.16 10:06. Заголовок: gosha? 1. Да, Codian..
gosha? 1. Да, Codian! (Cisco MCU 4515) 2. пытался, но, к сожалению, знаний не хватает :(
|
|
|
|
Отправлено: 19.08.16 13:17. Заголовок: AndreySh пишет: 1. ..
AndreySh пишет: цитата: | 1. Если не заполнены поля с данными, то это "прихоть" MCU. хоть и с пустыми значениями, но строки Accept-Encoding: Authorization должны присутствовать, без них http запрос не обрабатывается и ответ с ошибкой 201 (operation failed) |
| странно, я был уверен что такой запрос может выдать ошибку. не знаю как на счет Authorization скорее всего должно быть заполнини значениями authenticationUser и authenticationPassword из BodyLineCMD2 , а Accept-Encoding и User-Agent желательно заполнить значениями. Гоша прав 'Content-Type: text/xml' будет правильно. я бы выбрал вариант: Header5 = "Content-Type text/xml; charset=utf-8\n"; Header6 = "Accept-Encoding: identity\nUser-Agent: AndreySh\nAuthorization: Basic YWRtaW46cGFzc3dvcmQ=\n\n"; еше более подробно описано тут и тут
|
|
|
|
Отправлено: 23.08.16 09:21. Заголовок: Без претензий на пра..
Без претензий на правильность, но тем не менее рабочий вариант встроенного TCP client: integer MCU_connected; Integer_Function connect() { return(SocketConnectClient (tcpclient80, MCU_IPAddr, 80, 0)); } Function disconnect() { SocketDisconnectClient (tcpclient80); } Function to_MCU(string data) { signed_integer iStatus,i; if (MCU_Connected=0){connect();} i=0; while(i<90) { if (MCU_Connected=1) { iStatus = SocketSend(tcpclient80,data); if (iStatus < 0)Print("Error Sending to MCU: %d\n", iStatus); if (iStatus=-5){connect();delay(200);}else {i=100;} }else {delay(20);i=i+1;} } } SOCKETCONNECT tcpclient80 { MCU_Connected = 1; } SOCKETDISCONNECT tcpclient80 { MCU_Connected = 0; }
|
|
|
|
Отправлено: 31.01.20 11:32. Заголовок: Добрый день! Подскаж..
Добрый день! Подскажите, через программу postman отправляю по адресу: http://10.10.10.99/mnc/secure_api.php Команду: {"p_targetId":0,"p_cmd":"getProductListSaved","p_userName":"admin","p_password":"admin"} Wireshark видит как: POST /mnc/secure_api.php HTTP/1.1 Content-Type: application/json User-Agent: PostmanRuntime/7.22.0 Accept: */* Cache-Control: no-cache Postman-Token: 2b7ab1ae-93bb-49fd-975a-ab90603527c2 Host: 10.10.10.99 Accept-Encoding: gzip, deflate, br Content-Length: 88 Connection: keep-alive {"p_targetId":0,"p_cmd":"getProductListSaved","p_userName":"admin","p_password":"admin"} Команда выполнена, ответ SUCCESS Через Crestron засылаю такого типа команду: POST /mnc/secure_api.php?{"p_targetId":0,"p_cmd":"getProductListSaved","p_userName":"admin","p_password":"admin"} HTTP/1.0\nHost: 10.10.10.99\nContent-Type: text/json\n\n\n Выдает Failed, "p_msg":"invalid command" Это контроллер MUxlab. Может в строке где синтаксис не верный, подскажите
|
|
|
|
Отправлено: 31.01.20 21:11. Заголовок: 1.Начнем с того, что..
1.Начнем с того, что блок json (тот что в фигурных скобках) должен быть в самом конце пакета, за пределами \n\n Ведь в WireShark же так и есть 2.Скорее всего нужно еще и токен получить сначала как то и его тоже отправлять 3.100% нужно считать длину блока json и помещать её в поле Content-Length Дальше посмотрим )
|
|
|
|
Отправлено: 06.03.23 16:58. Заголовок: Коллеги, хочу повтор..
Коллеги, хочу повторить вопрос, заданный в начале этой темы. Есть устройство (кнопочная панель), которая по нажатию на кнопки генерит простые HTTP запросы (GET, к примеру) по указанному адресу. Нужно как то обрабатывать эти запросы, сходу не смог их получить на контроллере ( TCP/IP сервер с портом 80). В Как получить эти запросы в контроллере?
|
|
|
|
| администратор
|
|
|
Отправлено: 06.03.23 17:37. Заголовок: Примените TCP/IP Ser..
Примените TCP/IP Server в SIMPL. Подозреваю, у вас кнопка Sure Button.
|
|
|
|
Отправлено: 06.03.23 21:46. Заголовок: Admin пишет: Примен..
Admin пишет: цитата: | Примените TCP/IP Server в SIMPL |
| так сходу и не получилось :( в настройка сервера указывать адрес панели?
|
|
|
|
| администратор
|
|
|
Отправлено: 07.03.23 10:01. Заголовок: В случае, если "..
В случае, если "панель" не может быть сконфигурирована так, чтобы знать IP процессора, схема Клиент-сервер неприменима. Нет разницы, где клиент и сервер, можно использовать то, что понятно и работает. Установите связь, например через TCP/IP Client и следите за посылками от панели. В настройках клиента укажите адрес панели. Должен же он быть где-то обозначен, хотя бы один раз.
|
|
|
Ответов - 41
, стр:
1
2
3
All
[только новые]
|
|