В клиенте Savon, использующем HTTPI, прокси входит в параметры клиента. Он действует при получении удалённого WSDL и при отправке запроса SOAP.

client = Savon.client(
  wsdl: 'https://service.example/soap?wsdl',
  proxy: ENV.fetch('SOAP_PROXY_URL'),
  open_timeout: 5,
  read_timeout: 15
)

Пример предполагает транспорт HTTPI. Передайте одобренный URL прокси через окружение. Для публичного теста SOAP, допускающего неаутентифицированного HTTP-посредника, URL может предоставить кандидат из списка HTTP-прокси; решения об аутентификации сервиса и прокси держите раздельно. Если поддерживаемый способ аутентификации использует учётные данные в URL, закодируйте зарезервированные символы в этих данных и держите полученный URL вне журналов.

Savon называет их «глобальными параметрами», но они локальны для одного экземпляра клиента. Другой клиент, созданный в ином месте, не наследует прокси автоматически.

Проверьте установленный транспорт, прежде чем повторно использовать фрагмент. Текущая документация Savon относит эти параметры к HTTPI; у транспорта Faraday есть собственный интерфейс настройки через client.faraday, и он отвергает эти параметры, специфичные для HTTPI. Настраивайте выбранный транспорт, а не смешивайте два интерфейса.

Держите учётную запись прокси отдельно от учётных данных сервиса SOAP и значений WS-Security. Код 407 прокси, HTTP-запрос входа сервиса и ошибка SOAP обозначают разные обмены. Получение WSDL может не удаться ещё до того, как клиент выполнит хоть одну операцию приложения.

Похожие статьи