Savon,Wasabi将Ruby脚本连接到SOAP URL时出错

ban*_*ing 1 ruby httpclient wasabi savon

我正在尝试使用Ruby脚本连接到SOAP URL。

我正在关注 Railscasts集。我安装了savon gem(savon(2.4.0))。

然后在我的ruby文件中,我有以下代码:

 require 'savon'

 client = Savon.client(wsdl:"https://api.comscore.com/KeyMeasures.asmx?WSDL")
 response = client.call(:authenticate , message: { username:"xxxxx", password:"xxxxx"})

 puts "#{response.inspect}"
Run Code Online (Sandbox Code Playgroud)

我知道网址没有问题,因为我使用了SOAPUI并将WSDL URL放置在那里,并且我得到了响应。

当我运行上面的ruby文件时,出现以下异常:

  /Users/XXXX/.rvm/gems/ruby-2.0.0-p247/gems/wasabi-3.2.3/lib/wasabi/resolver.rb:44:in `load_from_remote': Error: 401 (Wasabi::Resolver::HTTPError)
from /Users/XXXXX/.rvm/gems/ruby-2.0.0-p247/gems/wasabi-3.2.3/lib/wasabi/resolver.rb:32:in `resolve'
Run Code Online (Sandbox Code Playgroud)

谷歌搜索之后,我看到了这篇文章,这似乎表明我应该安装并要求使用gem“ httpclient”,然后再试一次。没有变化,仍然出现相同的错误。

有人可以帮忙我吗.....

谢谢

Ste*_*ler 5

我试图从命令行访问您提供的WSDL curl。我无法访问未经授权的WSDL b / c。我想您首先必须提供凭据作为https请求的一部分。这就是为什么wasabi失败。它找不到WSDL文档。

根据可以通过将以下代码注入到客户端创建中来完成的文档:

client = Savon.client(wsdl: ...,
                      basic_auth: [ 'username', 'password' ],
                      log: true,
                      log_level: :debug,
                      pretty_print_xml: true)
client.call(...)
Run Code Online (Sandbox Code Playgroud)