|
История: Примеры скриптов > HTTP запросы Примеры запросов |
Пред. Вверх След. Еще |
В Simple-Scada можно выполнять HTTP POST/GET/PUT запросы к сторонним серверам для чтения данных с них.
Примеры скриптов
1. GET-запрос к серверу ipstack.com для получения информации о IP-адресе 
var После получения ответа, будет вызван скрипт с типом события "Выполнен HTTP запрос" с параметром Response, который содержит данные ответа. |
2. POST-запрос к произвольному сайту 
var |
3. GET-запрос с сохранением результата в файл 
Допустим, требуется запросить с сервера какие-то двоичные данные (например .pdf-файл или документ word/excel), а затем сохранить полученные данные в файл. Тогда сначала нужно отправить запрос на сервер: var Далее, создадим скрипт с типом события "Выполнен HTTP запрос" cо следующим кодом: begin |
4. POST-запрос с данными в формате JSON 
Допустим, требуется передать серверу POST запрос с JSON-данными и указать заголовок "ContentType" как "application/json". Для этого, при создании POST-данных нужно использовать константу hptJSON и добавить JSON данные в виде строки. Чтобы задать ContentType нужно использовать метод SetHeader. var |
5. POST-запрос с JSON-данными и авторизацией по токену 
Допустим, на сервере нужно авторизоваться по токену. Т.е., сначала нужно выполнить запрос и получить от сервера токен авторизации, а затем использовать этот токен в последующих запросах. Для решения задачи удобнее всего создать в скриптах глобальный модуль и описать в нем нужные процедуры, а затем вызывать их в других скриптах. Создадим новый скрипт с типом события "Глобальный модуль" с таким кодом (см. комментарии чтобы понять принцип работы): interface Далее, создадим новый скрипт с типом события "Выполнен HTTP запрос" с таким кодом: var Теперь остается вызвать процедуру DoAuthOpen и дождаться получения токена от сервера: begin Когда сервер вернет ответ, будет выполнен скрипт "Выполнен HTTP запрос" и значение токена запишется в глобальную переменную "AuthToken". Затем можно выполнить тестовый запрос с использованием токена: begin |
6. GET-запрос с аутентификацией с использованием HMAC 
Допустим, есть некий сервис, который после регистрации выдал нам: •публичный ключ: 9621a10905f1e50777ba4c59d6313d4d940f0ac8845ddd95ed98114515e9b5a2 •закрытый ключ: 2f589f22d1495f2b7532e424d4370547d3eb3b09be14e527dede76abbaea7b83 Заголовок аутентификации должен быть передан в следующем формате: Authentication: "hmac {public-key}:{unixtime}:{nonce}:{signature}" , где: •public-key - публичный ключ, •unixtime - текущее время в формате Unix, •nonce - случайное целое число, •signature - закодированная подпись. Подпись "signature" должна представлять собой строку вида "{method}+{path}+{unixtime}+{nonce}" закодированную механизмом HMAC с использованием криптографического алгоритма SHA-256 и закрытого ключа. Т.е., формулу для вычисления подписи можно записать так: hash_hmac("sha256", "private key", "{method}+{path}+{unixtime}+{nonce}") , где: •method - метод HTTP (GET или POST), •path - запрашиваемый путь, •unixtime - текущее время в формате Unix, •nonce - случайное целое число. Все вышеописанное можно легко сформировать в Simple-Scada с помощью встроенных функций и отправить в запросе серверу. Ниже пример скрипта с подробными комментариями: var |
7. Сервер вернул ответ в формате JSON. Как его разобрать? 
Допустим, сервер в ответ на HTTP запрос вернул в скаду данные в формате JSON, следующего вида: { В ответе видно массив "data", который может содержать произвольное количество данных (в данном примере он содержит 4 объекта). Нам нужно пройти в цикле по всем элементам массива "data" и для каждого элемента вывести поля "id", "name" и "description" на мнемосхему в компонент Text1. Когда в скаду приходит ответ от HTTP-сервера, сервер скады автоматически вызывает скрипты с типом события "Выполнен HTTP запрос" и в параметр Response записываются все данные ответа. Поэтому код для разбора ответа нужно написать в скрипте "Выполнен HTTP запрос": var После выполнения данного кода в компоненте Text1 отобразится следующий текст: id = 967, name = object_1, description = object one
Теперь рассмотрим другой ответ сервера. Пусть сервер вернул следующие данные: { Нам нужно пройти по каждому элементу массива "values" и извлечь из них значение свойства "dataParameter". Пример кода для данной задачи: var |
8. POST-запрос с заданной кодировкой 
По-умолчанию, при создании POST-запросов данные кодируются в UTF8. При необходимости, можно изменить кодировку, указав ее при создании запроса: var |
9. PUT-запрос с данными в формате JSON 
Допустим, требуется передать серверу PUT запрос с данными в формате JSON и указать заголовок "ContentType" как "application/json". Пример скприпта: var |