Попытка передать учетные данные для входа через HTTP, необходимо обойти - PullRequest
0 голосов
/ 10 февраля 2019

Моим друзьям, занимающимся веб-разработкой:

Я недавно купил GoGoGate2 Garage Door Opener, и я пытаюсь настроить локальный обходной путь через HTTP-запрос для запуска события open Garage Door Opener.(Это для использования с концентратором IoT).Я подключился к своему GoGoGate2 через IP, и это привело меня к пользовательскому интерфейсу на основе браузера.Я использовал WireShark, чтобы прослушивать HTTP-запросы, которые запускались при открытии события.Я пришел к выводу, что дверь можно открывать и закрывать с помощью следующего HTTP-запроса.

OPEN DOOR: http://device -ip / isg / opendoor.php? Numdoor= 1 & status = 2

ЗАКРЫВАЕТ ДВЕРЬ: http://device -ip / isg / opendoor.php? Numdoor = 1 & status = 0

Хорошо, это было достаточно просто.Когда я запускаю HTTP-запрос с компьютера или телефона в моей сети, запрос работает, и дверь открывается и закрывается идеально.Однако, когда я пытаюсь запустить HTTP-запрос от моего Hubitat, событие не запускается.Я попытался использовать свой HTTP точно так, как он был написан в окне инкогнито в Chrome, и я получил сообщение «Ограниченный доступ».Таким образом, очевидно, что Hubitat нужна какая-то аутентификация для общения с устройством GoGoGate2.

Есть ли какой-нибудь способ, которым я могу подключиться к своему Hubitat и использовать его для подключения к своему GoGoGate2 и сохранить его учетные данные для входа?Вот как я это сделал со своего телефона / компьютера.Разве нет способа сделать то же самое из самого Hubitat?

Извините, если это вопрос нуба.

Обратите внимание, я также попытался использовать формат login:password@device-ip/isg/opendoor.php?numdoor=1&status=2, но безуспешно

Кроме того, не уверен, что это поможет, но во время процесса аутентификации на устройстве открывания гаражных ворот вход выполняется с помощью метода записи.Из того, что я поняла, это релевантная информация.

Request Method: POST
Request URI : /index.php/index.php
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
Content-Type: application/x-www-form-urlencoded\r\n

Form Item: "login" = "mylogin"
Key: login
Value: mylogin

Form Item: "pass" = "mypass"
Key: pass
Value: mypass

Form Item: "sesion-abierta" = "1"
Key: sesion-abierta
Value: 1

Form Item: "send-login" = "Sign In"
Key: send-login
Value: Sign In

Я не уверен, как передавать информацию о сообщениях через HTTP-запрос, если у кого-то есть понимание того, как это сделать, или обойти это.?

Заранее спасибо,

Энди

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Поскольку логин основан на форме, вероятно, учетные данные хранятся в виде файлов cookie.Если эти файлы cookie являются долгоживущими, возможно, вы сможете использовать их повторно при подключении к API.Можно ли указать куки в запросе HTTP?В противном случае возможно ли выполнить последовательность нескольких запросов от устройства - POST для аутентификации, а затем операции.

В качестве альтернативы, вы можете разместить свой собственный прокси в локальной сети, которая выполняет вход в систему и последующий запросвнутренне.Это можно сделать программно с помощью curl в PHP.Вот пример: http://blog.andyhunt.info/2011/12/21/using-php-and-curl-to-log-in-to-a-website/

Убедитесь, что вы используете опцию CURLOPT_COOKIEJAR для сохранения файлов cookie аутентификации из формы входа, чтобы они могли быть включены в последующие запросы.

0 голосов
/ 10 февраля 2019

Вы должны иметь возможность использовать cURL для этого запроса:

curl -d "login = mylogin & pass = mypass & sesion-abierta = 1 & send-login = Sign In" -X POST http://www.requestdomain.com

найти больше информации на https://ec.haxx.se/http-post.html

...