ruby xmlrpc client


Mi sono ritrovato in questi giorni a dover scrivere un
client xmlrpc in ruby (per una applicazione rails, invero) e abituato a vedere queste cose funzionare in 5 minuti, mi sono perso quando ho visto che non funzionava.

Un client xmlrpc in ruby si scrive molto semplicemente più o meno così:

uri = "http://example_of_url:8000/"

server = XMLRPC::Client.new2(uri)

return = server.call('function')

Molto semplice, quindi, ma nel mio caso non funzionava con
il server xmlrpc a cui tentavo di connettermi. Eppure
questo server, scritto in erlang, funzionava: un client
xmlrpc in PHP infatti, riusciva a collegarsi senza problemi.

Poteva essere un problema del mio client, ma tentando
la connessione con altri server xmlrpc, funzionava correttamente.

Dove stava quindi il problema, che mi generava un “HTTP Error 415 – Unsupported media type”?

Il server xmlrpc scritto in erlang, confondeva il client ruby in quanto non forniva il Content-Type in modo corretto, o meglio, non lo forniva proprio. Per far funzionare il tutto, ho modificato le librerie ruby di xmlrpc, file

/usr/lib/ruby/1.8/xmlrpc/client.rb

riga 503, modificando:

"Content-Type"   => "text/xml; charset=utf-8",

in:

"Content-Type"   => "text/xml ",

e il file

/usr/lib/ruby/1.8/xmlrpc/utils.rb

nella funzione

parse_content_type

ho dovuto ridefinire str = “text/xml”. A questo punto, il client xmlrpc ha funzionato.

, ,

  1. #1 by Q on April 29, 2008 - 2:39 pm

    La dichiarazione del content type è obbligatoria per XML RPC e dovrebbe essere sempre di tipo text/xml. Quindi hai trovato un bug nella libreria del client Ruby; non capisco come mai scrivi che il server confondeva il client Ruby. Il server ti ha risposto che il tipo di contenuto (non specificato o di tipo html) era invalido per il tipo di richiesta. Gli altri server che hai utilizzato per le prove evidentemente non rispettano lo standard.
    http://www.xml.com/pub/a/1999/08/rpc/index.html
    http://static.userland.com/userLandDiscussArchive/msg002563.html
    http://www.giacomarro.com/cmob/specxmlrpc.html

(will not be published)