【问题标题】:How to get raw request that Savon sends如何获取 Savon 发送的原始请求
【发布时间】:2014-08-27 13:28:20
【问题描述】:

我正在使用 Savon 2.6 来实现 SOAP 服务的客户端。 我必须在数据库中保存原始请求和原始响应。 获取原始 XML 响应不是问题,但是如何获取原始 XML 请求?

我使用 Savon 的方式如下:

client = Savon.client(wsdl: "http://blabla.com/bla.wdsl")
response = client.call(:operation_name, message: {param1: "a", param2: "b'})
response.to_xml # => get raw XML response

【问题讨论】:

  • 我认为没有公开的方法。您应该查看 Savon 的来源并添加到其中。

标签: ruby savon


【解决方案1】:

您可以破解Client classOperation class 中的代码。

我所做的是在Operation 中添加一个返回请求的方法。在Client#call 中,我将请求设置为一个实例变量并为其添加了一个getter。

编辑: 如果 Operation#build_request 仍然像三年多前我第一次发布此内容时所做的那样:

def request(locals = {}, &block)
  builder = build(locals, &block)
  build_request(builder)
end

可能就是你要找的东西。

【讨论】:

  • Operation 中的方法是什么样的?
  • @GarryGomez 我添加了build_request 方法。它现在看起来有点不同,所以请检查它是否满足您的需求。编辑:不,我添加的是一个名为request 的方法。已合并,但现在不再存在。
【解决方案2】:

我使用的是 Savon 2.12,你可以使用类似这样的东西来获取将在请求中发送的内容:

req = client.build_request(:method_name, message: request_options)
puts req.xml

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多