1

我知道有大量关于如何使用 Ruby 发出 SOAP 请求的帖子(通常引用 gem Savon),但我无法理解它们(我完全是编程新手)。我能够成功访问 API 并使用 soaupUI 执行我的 get 请求,而我只是在寻找使用 Ruby 执行这些请求的方法。这是我的输入:

  • soap = 肥皂请求的 XML 代码
  • 发布“https://....”
  • 接受编码:gzip,deflate
  • 内容类型:文本/xml;charset=UTF-8
  • SOAPAction: "urn:provider/..."
  • 内容长度:1253
  • 主持人:网络服务....
  • 连接:保持活动
  • 用户代理:Apache-HttpClient/4.1.1 (java 1.5)

我用“....”替换了识别信息有没有一种方法可以简单地使用这些输入来启动我的肥皂请求?

谢谢!

编辑:好的,考虑到以下评论,这是我尝试访问的练习 API。端点是http://www.thomas-bayer.com:80/axis2/services/BLZService,我从soupUI 复制了soap,在那里我能够成功执行请求。

require 'net/http'
require 'net/https'

http = Net::HTTP.new('thomas-bayer.com', 80)
http.use_ssl = false
path = 'axis2/services/BLZService'

data = <<-EOF
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:blz="http://thomas-bayer.com/blz/">
<soapenv:Header/>
<soapenv:Body>
<blz:blz>70070010</blz:blz>
</blz:getBank>
</soapenv:Body>
</soapenv:Envelope>
EOF

headers = {
'Referer' => 'http://www.appfusion.net',
'Content-Type' => 'text/xml',
'Host' => 'thomas-bayer.com'
}

resp, data = http.post(path, data, headers)
puts 'Code = ' + resp.code
puts 'Message = ' + resp.message
resp.each { |key, val| puts key + ' = ' + val }
puts data

当我运行它时,它会返回许多不同的错误。任何帮助解决此问题将不胜感激;如果有帮助,这里是 wsdl:http ://www.thomas-bayer.com/axis2/services/BLZService?wsdl

4

1 回答 1

0

我想出了一个非常简单的方法来使用 savon 中的 soap.xml 类(版本 1):

client = Savon.client("www.mywsdl.wsdl")
response = client.request :get_my_request do
soap.xml ='my xml code'
end
于 2013-04-24T01:10:49.083 回答