2

我正在尝试使用 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}"

我知道 url 没有问题,因为我使用了 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'

在谷歌搜索后,我看到了这篇文章,这似乎表明我应该安装并需要 gem "httpclient",我做了,然后再试一次。没有变化,仍然得到同样的错误。

有人可以帮我看看如何进行.....

谢谢

4

1 回答 1

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(...)
于 2014-04-11T06:37:58.233 回答