以下是来自savon 文档的引用,以供将来参考:
SOAPAction 是遗留服务所需的 HTTP 标头信息。如果存在,标头值必须用双引号括住 URI 引用(SOAP 1.1. 规范,第 6.1.1 节)。
通过阅读 savon 源代码,我发现 Savon::Client#request 方法会在生成块之前自动设置“SOAPAction”标头。我试图删除 SOAPAction 标头并且它有效:
require 'savon'
client = Savon::Client.new do
wsdl.document = "test.wsdl"
end
client.request :wsdl, "sayHello" do
http.headers.delete("SOAPAction")
end
这是它生成的请求:
SOAP request: http://www.examples.com/SayHello/
DEBUG -- : Content-Type: text/xml;charset=UTF-8, Content-Length: 332
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:wsdl="http://www.examples.com/wsdl/HelloService.wsdl"
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<wsdl:sayHello></wsdl:sayHello>
</env:Body>
</env:Envelope>
如您所见,没有 SOAPAction HTTP 标头。
高温高压