Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: API запрос через Proxy  (Прочитано 2379 раз)

Mishko

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
API запрос через Proxy
« : 03 Августа 2020, 15:21:50 »
В сети для доступа в интернет используется Proxy, похоже что SCADA не принимает настройки системы.

Нашел в хелпе:
Синтаксис
Код
procedure SetProxyAuth(AHost: string; APort: Integer; AUserName, APassword: string; const AType: TM_ProxyType = ptBasic);
Описание
Включает работу через прокси-сервер с адресом AHost и портом APort (с авторизацией по имени пользователя AUserName и паролю APassword). Параметр AType может принимать следующие значения:
•ptBasic - использовать обычный прокси-сервер;
•ptSock4 - использовать ptSock4 прокси;
•ptSock4A - использовать ptSock4A прокси;
•ptSock5 - использовать ptSock5 прокси;

В итоге получилось так:
Код: (delphi)
var
  aHTTP: TM_HTTP;
  aQuery: string;
  AHost: string;
  APort: Integer;
  AUserName: string;
  APassword: string;
  AType: TM_ProxyType;
begin
  if MinutesBetween(Now, vrWeatherTimer.AsDateTime) >= 1 then
  begin
    vrWeatherTimer.Value := Now;
   aQuery := 'http://api.weatherstack.com/current?access_key=ключ&query=Samara';
   AHost := 'прокси.домен.ру';
   APort := порт;
   AUserName := 'Имя';
   APassword := 'Пароль';
   AType := ptBasic;
    aHTTP.SetProxyAuth(AHost, APort, AUserName, APassword, AType);
    aHTTP := RequestHTTP;     // создаём экземпляр запроса
    aHTTP.Get(aQuery, 77);    // вызываем GET с запросом aQuery и отмечаем его тегом = 77
  end;
end. 

Но авторизацию на прокси не проходит, что я делаю не так?
« Изменён: 05 Августа 2020, 20:31:05 от Simple-Scada »

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 2998
    • Просмотр профиля
    • Simple-Scada
Re: API запрос через Proxy
« Ответ #1 : 05 Августа 2020, 20:30:46 »
Здравствуйте.

Цитировать
похоже что SCADA не принимает настройки системы
Почему Вы так решили? То, что Вы работаете в интернете через прокси сервер, никак не влияет на то как работает скада, или другое ПО. Без прокси сервера запросы идут с Вашего ПК напрямую к конечному серверу. С прокси сервером те же запросы идут сначала на прокси-сервер, а затем на конечный сервер. Для скады в принципе безразлично каким образом запросы будут доставлены.
Процедура SetProxyAuth позволяет указать прокси сервер через который запросы будут отправляться конечному серверу.

Код, который Вы написали совсем не рабочий, если его выполнить, то в журнале сервера отобразится ошибка. Пожалуйста разберитесь сначала с тем как работает код, прежде чем менять его.
Код: (delphi)
aHTTP.SetProxyAuth(AHost, APort, AUserName, APassword, AType);  // здесь Вы работаете с aHTTP который ещё не создан
aHTTP := RequestHTTP;     // а в этой строке Вы создаёте aHTTP
Нужно сначала создать экземпляр класса TM_HTTP, через "aHTTP := RequestHTTP;", а затем работать с ним. Принцип работы с примерами описан в руководстве здесь и здесь. После выполнения запроса в скаде вызывается скрипт с типом события "Выполнен POST/GET запрос", в этом скрипте Вы можете проверить ответ сервера, он скажет в чем именно проблема, может быть не удалось отправить запрос, может быть сервер отклонил запрос из-за того что он неправильный и так далее...

Mishko

  • Новичок
  • *
  • Сообщений: 3
    • Просмотр профиля
Re: API запрос через Proxy
« Ответ #2 : 06 Августа 2020, 14:14:01 »
Да, разобрался.

Код
aHTTP.SetProxyAuth(AHost, APort, AUserName, APassword, AType);  // здесь Вы работаете с aHTTP который ещё не создан
aHTTP := RequestHTTP;     // а в этой строке Вы создаёте aHTTP

Именно эти две строчки необходимо поменять местами, и всё заработало.
Спасибо огромное, разбираюсь дальше...