使用ruby/savon通过SOAP发送base64binary(图像)


Sending base64binary (image) via SOAP with ruby / savon

我使用的是allegro.pl的SOAP api(ebay.com的抛光替代品),通过SOAP发送图像有点问题。我在官方论坛上问了同样的问题,但不幸的是没有人回答。

无论如何,在PHP中工作(一段)代码(soap消息)看起来是这样的:

array(
'fid' => 16,
'fvalueImage' => file_get_contents('http://www.stropna_www.pl/images/obrazek.jpg') 

注意,这不是一条完整的soap消息,但这条消息让我今晚睡不着

它是有效的(在文档中,我不能确定它是否有效,因为我没有使用PHP(我也不知道))我在ruby中寻找file_get_contents的等价物,我试图使用net/http和open-uri从url打开文件,甚至尝试使用

img = File.open('img.jpg', 'rb') { |f| f.read }

但每次尝试时,服务器都会返回无效的XML。

当我尝试发送不带图像的请求时,它可以正常工作


以下是Ruby中的完整代码:

def self.do_new_auction_ext 
img = File.open('img.jpg', 'rb') { |f| f.read }
xml_message = prepare_message("DoNewAuctionExtRequest", {
  :sessionHandle => self.session_id,
  :fields => [
    { :fid => 1,                                # Tytuł
      :fvalueString => "Oferta Testowa ze zdjeciem", },       # TODO: Zmienne?
    { :fid => 2,                                # Kategoria
      :fvalueInt => 1834 },                       # TODO: Zmienne?
    { :fid => 4,                                # Czas trwania
      :fvalueInt => 3 },                          # 1 - 3 dni, 2 - 7 dni, 3 - 10 dni
    { :fid => 5,                                # Ilość
      :fvalueInt => 12},                          # TODO: Zmienne?
    { :fid => 8,                                # Cena kup teraz
      :fvalueFloat => 50.00},                     # TODO: Zmienne?
    { :fid => 9,                                # Kraj
      :fvalueInt => 228},                         # 1 - Polska, 228 - Neverland
    { :fid => 10,                               # Wojewodztwo
      :fvalueInt => 215},                         # Lewopolskie
    { :fid => 11,                               # Miejscowość
      :fvalueString => "Bielsko-Biala"},
    { :fid => 14,                               # Formy platnosci
      :fvalueInt => 1 },                          # Płatne z góry przelewem
    { :fid => 16,                               # Zdjecie 1
      :fvalueString => img },
    #{ :fid => 15,                               # Opcje dodatkowe
    #  :fvalueInt => 2},
    { :fid => 24,                               # Opis
      :fvalueString => "konik"},
    { :fid => 28,                               # Sztuki / Komplety / Pary
      :fvalueInt => 1},
    { :fid => 32,                               # Kod pocztowy
      :fvalueString => "43-300"},
    { :fid => 35,                               # Darmowe opcje przesylki
      :fvalueInt => 2}                          # 1 - Odbior osobisty, 2 - e-mail, 4 - Odbior osobisty po przedplacie
  ]
})
# puts xml_message
response = @client.call(:do_new_auction_ext) do
  xml xml_message
end

不介意润色评论

prepare_message函数只创建发送到服务器的xml,我非常确信它在没有映像的情况下正常工作——服务器会按照它应该的方式响应(它工作!)

但是,随着图像的发送,服务器用进行了响应

{:fault=>{:faultcode=>"Sender", :faultstring=>"Invalid XML"}}

这是一个有工作PHP代码的网站网站是波兰的,但代码是在PHP

最后,这里是文档,它也是抛光的,但包括英文命名和"Przykłady-wywoł; ań"选项卡下的附加PHP代码

我使用Ruby 1.9.3和savon来发送所有SOAP请求(这是有效的,但发送图像不起作用)。


为文字墙道歉,但我试图尽我所能解释这一点。提前感谢您的帮助,甚至感谢您阅读以下内容:)

我会尝试对图像内容进行编码,比如:

Base64.encode64(File.binread('path_to_your_file')