2016-06-10 3 views
3

Мы (я и моя команда разработчиков) являются относительно новыми для Elixir, особенно после успешного переноса больших частей нашего сервиса API в Elixir с отличными результатами.Elixir SOAP (detergentex) с сертификатом клиента ssl

Однако у нас возникла проблема подключения к восходящему SOAP WebService, для которого требуется сертификат SSL-клиента. Оберточная библиотека detergentex представляется единственной реальной доступной библиотекой для использования веб-сервисов, однако я не могу найти способ использования сертификатов SSL клиента в запросе, который требуется нашим поставщиком услуг.

В настоящее время мы используем SUDS в Python для достижения этого, однако портирование на Elixir будет иметь огромные преимущества для параллелизации этих конкретных запросов.

Любая помощь будет оценена по весу!

+1

Вы получили эту работу в конце? –

+0

Я частично работал, но возникли проблемы с библиотекой моющих средств в Erlang, которая не позволяла использовать WSDL веб-службы - в частности, у WebService были импорт, который не был включен. В конце концов, я просто использовал HTTPoison с Hackneye и проанализировал XML с использованием библиотеки XML явно. – Monty

ответ

2

Похоже, что detergentex сам не поддерживает его, но библиотека Erlang, которую она обертывает, detergent, выглядит так, будто она ее поддерживает.

Функция detergent:callcan be called with an optional fourth argument, a #call_opts{} запись. Эта запись определена в detergent.hrl и содержит поле под названием http_client_options. В файле detergent.erl эта запись в конечном итоге попадает на один из двух HTTP-клиентов: он выбирает ibrowse, если это доступно, и в противном случае использует httpc из встроенного приложения.

Для httpc, вы можете передать параметры SSL как {ssl, [...]} кортеж в http_client_options, в то время как ibrowse ожидает, что кортеж будет {ssl_options, [...]}, так что вы должны знать, какие HTTP-клиент моющее средство будет использовать для того, чтобы пройти правильный вариант.

Параметры SSL описаны в ssl man page. Чтобы установить сертификат клиента, передайте параметры {certfile, "/path/to/client.cert"} и {keyfile, "/path/to/client.key"}. Если сертификат и закрытый ключ находятся в одном файле, вы можете опустить параметр keyfile.

Нельзя добавить дополнительную поддержку этому моющему средству, или вы можете вызвать моющее средство непосредственно из Эликсира.

Смежные вопросы