2012-01-31 9 views
8

Purtroppo non ho molta esperienza con la pubblicazione di documenti (ad esempio XML) su server Web, quindi mi scuso se manca la mia comprensione di HTTP.Utilizzo di Ruby per inviare una richiesta XML a un server web

Ho un server Web di base Mongrel installato in un'app rubino su 127.0.0.1 porta 2000. (Il server).

Sto eseguendo un'app Ruby separata sullo stesso computer. (Il cliente).

Ho bisogno che il client POST un documento XML al server.

Ho provato a utilizzare Net :: HTTP per eseguire questa operazione, ma non riesco a trovare un chiaro esempio che indichi cosa dovrei fare. Ho avuto un tentativo, ma ho riscontrato errori. Ho rotto la richiesta verso il basso per rendere il più semplice possibile:

http = Net::HTTP.new("127.0.0.1", 2000) 
http.post('file', 'query=foo') #xc.rb line 6 

ma provoca il seguente errore

C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:141:in `read_nonblock': An existing connection was forcibly closed by the remote host. (Errno::ECONNRESET) 
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:141:in `rbuf_fill' 
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:122:in `readuntil' 
    from C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:132:in `readline' 
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2562:in `read_status_line' 
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:2551:in `read_new' 
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1319:in `block in transport_request' 
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1316:in `catch' 
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1316:in `transport_request' 
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1293:in `request' 
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1286:in `block in request' 
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:745:in `start' 
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1284:in `request' 
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1307:in `send_entity' 
    from C:/Ruby193/lib/ruby/1.9.1/net/http.rb:1096:in `post' 
    from W:/Ruby/A/xc.rb:6:in `<main>' 

immagino lo sto facendo tutto sbagliato. Per favore, puoi darmi un esempio (o indicarmi un tutorial) che dovrebbe permettermi di pubblicare alcuni dati di base, come "<tag1>text</tag1>". Spero di essere in grado di elaborare le intestazioni appropriate e gestire la risposta.

Inoltre, non è necessario utilizzare net/http; qualsiasi metodo gratuito che non sia dotato di restrizioni di licenza per uso commerciale extra va bene.

+0

Si sta tentando di eseguire il debug del cliente. Ma hai dimostrato che il server funziona correttamente? –

+0

Accedo allo stesso URL tramite un browser web e il server esegue correttamente 'p' sulla richiesta (non l'ho ancora impostato per fare nient'altro). Durante la connessione tramite client, il server segnala che sta ricevendo una richiesta HTTP non corretta. Errore di analisi HTTP, richiesta non corretta (127.0.0.1): # '. Sono abbastanza sicuro che è solo che non so come postare correttamente i dati sul server. Se riesco a scoprire come dovrei farlo, posso eseguire il debug da lì, se necessario. – SimonMayer

risposta

4

Questo è incredibilmente facile, quando si utilizza il rest-client gemma

require 'rest_client' 

response = RestClient.post "http://127.0.0.1:2000", "<tag1>text</tag1>", :content_type => "text/xml" 
+0

Se si controlla il log del server di richiesta, i parametri saranno '{" tag1 "=>" testo "}' invece di plain '" text "'. Perché? –

+0

Non lo so. Se vuoi una risposta, dovresti davvero chiederla come una nuova domanda. – SimonMayer

Problemi correlati