Имя: Пароль:
1C
 
Не взлетает HTTPСоединение. В чем тут может быть ошибка.
0 Галахад
 
гуру
11.02.15
10:41
По мануалу нужно
1. Выполнить запрос следующего формата:
<device_url>/new_session.html.
Результатом запроса является JSON–объект, содержащий поля device_salt, session_salt
2. , 3. На основе полученных данных сгенерировать строку pass_sha256.
4. выполнить запрос следующего формата:
<device_url>/scripts/login.php?login=<user_name>&pass_sha256=<pass_sha256> ,
где <user_name> — имя учетной записи пользователя (admin или user), <pass_sha256> —
строка, вычисленная в п.3.

На одинэсе это выглядит так:
Шаг 1.
ТекстЗапроса = "new_session.html";
Соединение = Новый HTTPСоединение(Сервер, Порт, Логин, Пароль, Прокси);
Соединение.Получить(ТекстЗапроса, имяВыходногоФайла);

Получаю ответ:
{"error":"","error_id":"","device_salt":"1C95CE4F34F3FEC5CE3E69FC46F7487A","session_salt":"jcDGdRC5iwfXA3sl2MyuUKeZBQbvVYImqHoTg8nS1W7rJEtLNaO6x49hkPpz0F","api_version":"3.1"}

Шаг 4.
ТекстЗапроса = scripts/login.php?login=admin&pass_sha256=24bd1d59d119b8255dabb30fdfebc911af9bb981af9643229824a22477a25849
Соединение = Новый HTTPСоединение(Сервер, Порт, Логин, Пароль, Прокси);
Соединение.Получить(ТекстЗапроса, имяВыходногоФайла);

Получаю ответ:
{"error":"\u041e\u0448\u0438\u0431\u043a\u0430 \u0441\u0435\u0441\u0441\u0438\u0438: \u0432\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e. \u041f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443.","error_id":"session_failed"}
1 Галахад
 
гуру
11.02.15
10:47
Шаги 2., 3. проверил на калькуляторе. :-)
Вроде ошибок нет.

Значит как-то не так передаю данные по HTTPСоединение.
2 ShoGUN
 
11.02.15
10:50
(1) А в заголовках ничего указать не надо?
3 Галахад
 
гуру
11.02.15
10:53
(2) Вроде нет. Вот кусок документации:

8.2 Web API
Обращение к устройству ВСП Statistics Dome осуществляется посредством GET– или
POST-запросов, посылаемых по протоколу HTTP/HTTPS. Для работы с устройством требуется:
1)  поддержка cookie;
2)  отключение проверки подлинности сертификатов.
Список возможных запросов:
1)  аутентификация;

Каждый запрос имеет следующий формат:
<протокол>://<IP–адрес устройства или доменное имя>:<порт>/<путь к скрипту>?<параметры>
В дальнейшем для сокращения записи вместо <протокол>://<IP–адрес устройства или доменное
имя>:<порт> будет использоваться <device_url>.
Ответы на запросы (если это не оговорено отдельно) поступают в виде объекта JSON и содержат
поля error и error_id, значения которых позволяют судить об успешности выполнения запроса:
Ответы на запросы могут иметь дополнительные поля, не описанные в документации. Строчки в
выходных параметрах имеют кодировку UTF-8.
4 ShoGUN
 
11.02.15
11:29
(3) Если декодировать escape-последовательности, то получится: "Ошибка сессии: время ожидания истекло. Перезагрузите страницу." :)
5 Галахад
 
гуру
11.02.15
11:39
(4) Ага. В мануале это звучит так:
ошибка сессии (может возникнуть, если сессия истекла в процессе
аутентификации; следует полностью повторить процедуру аутентификации)

Насколько я понимаю, чего-то не  то я отправил на 4 шаге.
Непонятно только чего надо...
6 Bober
 
11.02.15
11:57
(5) на шаге 4 нужно в заголовки передать куки.
7 Bober
 
11.02.15
11:58
(5) лучше всего посмотреть как это все работает в браузере по F12.
8 oleg_km
 
11.02.15
12:22
(7) Или фиддлером
9 Галахад
 
гуру
11.02.15
12:31
(6), (8) Спасибо!

Переписал шаг 4. и заработало:

    ЗаголовкиHTTP = Новый Соответствие;
    Куки = ОтветHTTP.Заголовки["Set-Cookie"];
    Если ЗначениеЗаполнено(Куки) Тогда
        ЗаголовкиHTTP.Вставить("Cookie", Куки);
    КонецЕсли;
    
    ЗапросСерверу = Новый HTTPЗапрос(ТекстЗапроса);
    ЗапросСерверу.Заголовки = ЗаголовкиHTTP;
    
    ОтветHTTP = Соединение.Получить(ЗапросСерверу, имяВыходногоФайла);
10 ShoGUN
 
11.02.15
12:42
(9) А мне спасибо за (2)? :))))
11 Галахад
 
гуру
11.02.15
12:46
(10) Гм. Как обычно, правильный ответ в самом начале. :-) Спасибо!
AdBlock убивает бесплатный контент. 1Сергей