如何从Savon请求中删除“SOAPAction”HTTP标头

时间:2011-12-15 17:39:44

标签: ruby http header savon

如何从Savon请求中删除HTTP标头,例如

client.request 'v5:ProcessShipments' do
  client.http.headers["SOAPAction"] = "example_post"
end

这将生成

DEBUG -- : SOAPAction: example_post

服务器会响应

Server did not recognize the value of HTTP Header SOAPAction: example_post.

但是我不想要任何SOAPAction

我试图清除变量并删除它。我搜索了一段时间,找不到任何东西,所以我希望以前没有问过。

提前致谢。

如果我不覆盖它,那么默认情况下,Savon将使用client.request'v5:ProcessShipments',这也是不正确的。

1 个答案:

答案 0 :(得分:5)

以下是savon documentation对未来参考文献的引用:

  

SOAPAction是旧服务所需的HTTP标头信息。   如果存在,则标题值必须包含双引号   URI-reference(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标头。

HTH