Ruby Savon 2.1.0上带有自定义标题的哈希未定义条

Ruby Savon 2.1.0上带有自定义标题的哈希未定义条,ruby,savon,Ruby,Savon,在尝试使用Savon 2.1.0构建用于身份验证的自定义头时,我遇到了一个异常,下面是重现该问题的示例代码,我将感谢您在这方面提供的任何帮助 require 'open-uri' require 'savon' headers = { 'IvansWSAuthentication' => { 'User' => 'my_user', 'Password' => 'my_pass', 'ClientId' => 'my_client_id'

在尝试使用Savon 2.1.0构建用于身份验证的自定义头时,我遇到了一个异常,下面是重现该问题的示例代码,我将感谢您在这方面提供的任何帮助

require 'open-uri'
require 'savon'

headers = {
  'IvansWSAuthentication' => {
    'User' => 'my_user',
    'Password' => 'my_pass',
    'ClientId' => 'my_client_id'
  }
}

x12 = 'test'

client = Savon.client(
  wsdl: 'https://limeservices.ivans.com/EligibilityOne.asmx?WSDL',
  headers: headers
)

request_params = {
  form270: x12
}

response = client.call(:send_commercial_eligibility_form_request, message: request_params)
这是一个例外:

1.9.3-p392 :023 >   response = client.call(:send_commercial_eligibility_form_request, message: request_params)
D, [2013-03-05T23:02:30.647097 #11590] DEBUG -- : HTTPI GET request to limeservices.ivans.com (net_http)
I, [2013-03-05T23:02:31.600016 #11590]  INFO -- : SOAP request: https://limeservices.ivans.com/EligibilityOne.asmx
I, [2013-03-05T23:02:31.600157 #11590]  INFO -- : IvansWSAuthentication: {"User"=>"my_user", "Password"=>"my_pass", "ClientId"=>"my_client_id"}, SOAPAction: "http://tempuri.org/SendCommercialEligibilityFormRequest", Content-Type: text/xml;charset=UTF-8, Content-Length: 389
D, [2013-03-05T23:02:31.600206 #11590] DEBUG -- : <?xml version="1.0" encoding="UTF-8"?><env:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="http://tempuri.org/" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"><env:Body><tns:SendCommercialEligibilityFormRequest><tns:form270>test</tns:form270></tns:SendCommercialEligibilityFormRequest></env:Body></env:Envelope>
D, [2013-03-05T23:02:31.600474 #11590] DEBUG -- : HTTPI POST request to limeservices.ivans.com (net_http)
NoMethodError: undefined method `strip' for #<Hash:0x007fb044365a50>
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/http.rb:1435:in `block in initialize_http_header'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.5.2/lib/rack/utils.rb:451:in `block in each'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.5.2/lib/rack/utils.rb:450:in `each'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/rack-1.5.2/lib/rack/utils.rb:450:in `each'
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/http.rb:1433:in `initialize_http_header'
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/http.rb:1862:in `initialize'
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/http.rb:2093:in `initialize'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi/adapter/net_http.rb:87:in `new'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi/adapter/net_http.rb:87:in `request_client'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi/adapter/net_http.rb:55:in `block in do_request'
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/lib/ruby/1.9.1/net/http.rb:745:in `start'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi/adapter/net_http.rb:54:in `do_request'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi/adapter/net_http.rb:31:in `request'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi.rb:137:in `request'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/httpi-2.0.2/lib/httpi.rb:109:in `post'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/savon-2.1.0/lib/savon/operation.rb:59:in `call!'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/savon-2.1.0/lib/savon/operation.rb:48:in `call'
    from /Users/rorra/.rvm/gems/ruby-1.9.3-p392/gems/savon-2.1.0/lib/savon/client.rb:38:in `call'
    from (irb):23
    from /Users/rorra/.rvm/rubies/ruby-1.9.3-p392/bin/irb:16:in `<main>'1.9.3-p392 :024 > 

好的,问题是通过在Savon 2.1.0上设置参数Header,我要做的是为HTTP请求设置Header,HTTP请求参数应该是key:String,因为ruby HTTP library在Header中包含的每个哈希值上调用strip,所以会引发异常

我最初的想法是为身份验证设置自定义soap头,所以我所要做的就是:

client = Savon.client(
  wsdl: 'https://limeservices.ivans.com/EligibilityOne.asmx?WSDL',
  soap_header: headers
)

例外在哪里???