ruby - Savon 2.1.0 基本身份验证无法正常工作

标签 ruby soap wsdl savon

我正在尝试访问具有以下特征的 SOAP 服务: 1. WSDL无需认证即可使用 2. 可以使用 basic_auth 通过 https 访问该服务 3.根据SOAP服务,“Authorization”头需要包含在每个请求中

这是我构建 soap 客户端的代码:

@wsdl="https://example.com/table.do&WSDL"
@proxy="http://internal.proxy.com:8080"
@basic_auth=["user","pass"]
@headers={"Authorization" => "Basic"}
client = Savon.client do |globals|
  globals.wsdl @wsdl
  globals.proxy @proxy
  globals.basic_auth @basic_auth
  globals.headers @headers
end

这是 client.globals.inspect:

#<Savon::GlobalOptions:0x0000000382c7a8 @options={:encoding=>"UTF-8", 
:soap_version=>1, :namespaces=>{}, :logger=>#<Logger:0x0000000382c730 @progname=nil,
@level=0, @default_formatter=#<Logger::Formatter:0x0000000382c708 
@datetime_format=nil>, 
@formatter=nil, @logdev=#<Logger::LogDevice:0x0000000382c6b8 @shift_size=nil, 
@shift_age=nil, @filename=nil, @dev=#<IO:<STDOUT>>,
 @mutex=#<Logger::LogDevice::LogDeviceMutex:0x0000000382c690 @mon_owner=nil, 
@mon_count=0, @mon_mutex=#<Mutex:0x0000000382c640>>>>, :log=>true, :filters=>[], 
:pretty_print_xml=>false, :raise_errors=>true, :strip_namespaces=>true, 
:convert_response_tags_to=>#<Proc:0x0000000382c5c8@/usr/local/rvm/gems/ruby-2.0.0-p0/gems/savon-2.1.0/lib/savon/options.rb:48 (lambda)>, 
:wsdl=>"https://example.com/table.do&WSDL", 
:proxy=>"http://internal.proxy.com:8080", 
:basic_auth=>["user", "pass"], 
:headers=>{"Authorization"=>"Basic"}}>

当我打电话时:

client.call(:get, message: { sys_id: "67d2f77ed9377840c53fc6da9c094635" })

服务正在返回:

DEBUG -- : HTTPI GET request to xseaddev.service-now.com (net_http)
INFO -- : SOAP request: https://xseaddev.service-now.com/change_task_list.do?displayvalue=all&SOAP
INFO -- : SOAPAction: "http://www.service-now.com/change_task/get", Content-Type: text/xml;charset=UTF-8, Content-Length: 408
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://www.service-now.com" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ins0="http://www.service-now.com/change_task"><env:Body><ins0:get><tns:sysId>67d2f77ed9377840c53fc6da9c094635</tns:sysId></ins0:get></env:Body></env:Envelope>
DEBUG -- : HTTPI POST request to xseaddev.service-now.com (net_http)
INFO -- : SOAP response (status 401)

我是否错误地构建了客户端?我没有看到在 GET 或 PoST 请求上发送任何身份验证 header 。 我需要添加/删除任何东西才能让它工作吗?您的帮助将不胜感激。

最佳答案

我想您应该能够执行以下操作:

client = Savon.client(endpoint: ENDPOINT, namespace: NAMESPACE, basic_auth: ["user", "password"])

(或 block 形式相同)。

在“身份验证”标题下查看此页面:http://savonrb.com/version2/globals.html

(我也在做同样的事情,但使用的是 WSDL)。

关于ruby - Savon 2.1.0 基本身份验证无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15299541/

相关文章:

wsdl - wsimport 不起作用

ruby - 导轨 4 : auto load from lib

ruby-on-rails - ruby 中的继承和扩展

xml - 使用 Matlab 发送 SOAP 请求

asp.net - WCF:如何将多个服务组合到单个 WSDL 中

c# - 从 .Net 客户端将图像发送到 SOAP 1.0 Web 服务

php - 关于 wsdl、web 服务和 php soap 的好书?

ruby - Watir ... sleep 和等待之间的区别

Ruby 未定义方法 `[]' 为 nil :NilClass (NoMethodError)

web-services - 无法在 soap ui 中加载 wsdl 链接