如何使用Ruby Savon编写SOAP身份验证头

如何使用Ruby Savon编写SOAP身份验证头,ruby,api,soap,savon,Ruby,Api,Soap,Savon,我是第一次调用基于SOAP的API,我从文档中获得了以下信息: 在客户端中,按如下方式构造授权标头: 1连接用户名和密码,例如: 示例用户名:示例密码 2以64为基数对字符串进行编码,例如: RXHHBXBSZVZZXJOYW1LOKV4YW1WBGVQYXNZD29YZA== 3在代码中,输入值为Basic的授权标题 带有编码用户名和密码的示例Web服务标头 POST HTTP/1.1 接受编码:gzip,deflate 内容类型:text/xml;字符集=UTF-8 SOAPAction:“

我是第一次调用基于SOAP的API,我从文档中获得了以下信息:

在客户端中,按如下方式构造授权标头:

1连接用户名和密码,例如: 示例用户名:示例密码

2以64为基数对字符串进行编码,例如: RXHHBXBSZVZZXJOYW1LOKV4YW1WBGVQYXNZD29YZA==

3在代码中,输入值为Basic的授权标题

带有编码用户名和密码的示例Web服务标头

POST HTTP/1.1

接受编码:gzip,deflate

内容类型:text/xml;字符集=UTF-8

SOAPAction:“

授权:基本RXHHBXBSZVZZXJOYW1LOKV4YW1WBGVQYXNZD29YZA==

我正在用Savon gem打电话。鉴于上述信息,我如何使用Ruby 1.9.3和Savon gem对API调用进行身份验证

这就是我用来设置WSDL或
客户机的方法

client = Savon.client(wsdl: "https://api.five9.com/wsadmin/v2/AdminWebService?wsdl&user=luigi@apitest.com")

您需要在消息的SOAP头中包含身份验证凭据。 Savon为它提供了:soap_头符号

您的示例可以如下所示:

require 'savon'
require 'securerandom'

realm = Base64.strict_encode64("ExampleUsername:ExamplePassword")
client = Savon.client(
    wsdl: "https://api.five9.com/wsadmin/v2/AdminWebService?wsdl",
    soap_header: { 'Authorization:' => "Basic #{realm}"},
    log: true,
    log_level: debug,
    pretty_print_xml: true
)

我无法在这个示例中测试它,因为我缺少用户凭据,但它通过了“ruby-c”。

感谢您的提示。在savon v2中,我不得不使用新的语法:
basic\u-auth:[“username”,“password”],
我认为最初的问题是,由于某种原因,
basic\u-auth
不起作用。因此,我们不得不退回到http头的原始编码。@house9谢谢,您的解决方案成功了。你救了我一天!