|   |   | 
| 
 | Не взлетает 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) Гм. Как обычно, правильный ответ в самом начале. :-) Спасибо!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |