Как удалить HTTP-заголовок «SOAPAction» из запроса Savon - PullRequest
2 голосов
/ 15 декабря 2011

Как бы я удалил заголовки HTTP из запроса Savon, например

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 (s)

Я попытался очистить переменную и удалить ее. Я некоторое время искал и не мог ничего найти, поэтому надеюсь, что об этом раньше не спрашивали.

Заранее спасибо.

Если я не переопределю его, то по умолчанию Savon будет использовать client.request 'v5: ProcessShipments', что также неверно.

1 Ответ

5 голосов
/ 16 декабря 2011

Вот цитата из savon документации для будущих ссылок:

SOAPAction - это информация заголовка HTTP, требуемая устаревшими сервисами.Если оно присутствует, значение заголовка должно иметь двойные кавычки, окружающие URI-ссылку (SOAP 1.1. Спецификация, раздел 6.1.1).

Читая исходный код savon, я понял, что Savon :: Client #Метод запроса автоматически устанавливает заголовок «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>

Как видите, заголовок HTTP SOAPAction отсутствует.

НТН

...