2

たとえば、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'を使用しますが、これも正しくありません。

4

1 に答える 1

5

以下は、今後の参考のために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 ヘッダーはありません。

HTH

于 2011-12-16T07:01:08.067 に答える