2016-08-25 15 views
0

Я использую ruby ​​для отправки SOAP-запроса на очень бизнес-бла-бла-сервис, поэтому, к сожалению, я не могу прикрепить какие-либо образцы, отправлять любые серверные журналы, никто не знает, что не так на стороне поставщика или как должны выглядеть фактические HTTP-запросы (за исключением одного XML-примера, который я получил, но нет заголовков HTTP), документы очень ориентированы на Microsoft с примерами C# и whatnot («экземпляр AbstractFactoryFactory ...» и еще что), долгое программное обеспечение для предприятий.Отправка XML SOAP вручную и получение кода ошибки HTTP 500 и двоичных данных в ответе

Но в итоге я взял один из своих XML-файлов из своих журналов и отправил их через HTTP в конечную точку из WSDL и отправил их на свой хост с помощью Savon gem raw XML option и получил сообщение об ошибке HTTP 500 со своего хоста и кучу двоичных данных не-ascii внутри - буквально, никакие символы ASCII не находятся в теле.

Я предположил, что, возможно, Савон делает плохие магии или что вариант XML не работает, как ожидалось, и я пытался посылать тот же запрос через Фарадей, но получил то же самое,

заголовков ответа HTTP говорит, что это ответ HTTP, XML кодированию, из хоста ASP.NET:

"content-type"=>"text/xml; charset=utf-8", 
"server"=>"Microsoft-IIS/7.5", 
"x-aspnet-version"=>"2.0.50727", 
"x-powered-by"=>"ASP.NET", 

, но опять же, 440 байт на сумму двоичных файлов в ответ:

method=:post, 
body= 
    "\x1F\x8B\b\x00\x00... 

и т.д.

Я пропустил какой-то странный аспект спецификации SOAP, и мне нужно что-то сделать для того, чтобы декодировать эти данные, или их сервер ушел от моих XML-заголовков или HTTP-заголовков или что-то еще, и мне нужно выполнить ping-провайдер?

Update 1

я заметил, что их оригинальный XML был UTF-16 набора кодирования, поэтому я попытался кодирующей сырец строки в UTF-16, а затем был Савон изрыгать ошибки у меня о плохих данных, то я обновил кодирование в конфиге клиента Savon. Но я все еще получаю HTTP 500 ошибок и двоичные файлы в качестве ответа, и если я пытаюсь что-нибудь войти Савон сообщает об ошибке:

Encoding::CompatibilityError: incompatible encoding regexp match (US-ASCII regexp with UTF-16 string) 
from /home/bbozo/.rvm/gems/ruby-2.2.4/gems/savon-2.11.1/lib/savon/log_message.rb:13:in `to_s' 

Фарадея в основном сообщили такое же поведение, в блоб.

Update 2

Я попытался обжигающе кодировку каждого известного кодирования, и ничего не получил, несмотря на то, что заголовки HTTP подразумевает кодирование UTF-8, это, очевидно, не

Encoding.name_list.map{ |e_in| [ e_in, (response.body.dup.force_encoding(e_in).encode('utf-8') rescue 'incompatible') ] } 

Там ничто не указывает на кодировку в файлах WSDL, спецификация API даже не упоминает кодировку, за исключением того, что XML-запросы запроса должны быть кодировкой UTF-8, я пытался кодировать тело, изменяя определение кодировки XML, заголовки HTTP, но все же я получаю один и тот же двоичный blob, с тем же заголовком (\x1F\x8B\b\x00\x00) - так что это не какое-то странное шифрование.

Возможно сжатие?

Я пробовал с https для хорошей меры и ничего.

Вопрос

мне не хватает какой-то странный аспект спецификации SOAP, и мне нужно сделать что-то, чтобы расшифровать эти данные или имеет их сервер пошли помешанные из моего XML, HTTP заголовки или что-то другое, и мне нужно пинговать провайдер?

+0

Вы пробовали потреблять ответ XML с Nokogiri? Я успешно работал с DOTNET, реализованным SOAP/WS *. –

+0

Спасибо @SteffenRoller, я просто попытался разобрать запрос с помощью 'Hash.from_xml', и он отлично работал, поэтому формат XML должен быть в порядке – bbozo

ответ