2013-02-22 4 views
1

Disons que j'ai créé un blog qu'un utilisateur est en train de créer et que je veux envoyer toutes les données vers un service web externe en XML avec un schéma spécifique afin qu'il puisse être intégré dans ce web un service.Rails 3 Publier sur le service web externe

je cherche dans le ActionDispatch de la demande

Et je lis ce post Using Ruby on Rails to POST JSON/XML data to a web service et répondre

Cependant, je suis une erreur en disant content_type était pas une méthode valable pour la demande. J'ai donc changé cette ligne pour appeler la méthode d'en-tête et créer un en-tête pour le type de contenu avec les informations appropriées

Ok ... alors maintenant où aller?

Ceci est mon code à ce jour:

url= URI.parse('http://10.29.3.47:8080/ingest') 
response = Net::HTTP::Post.new(url.path) 
request.headers["Content-Type"] = 'application/json' 
request.body = 'all of my xml data and schema which is far too long to type here' 
response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)} 
assert_equal '201 Created', response.get_fields('Status') 

Je reçois une erreur disant que request.body est pas non plus un appel de méthode valable, mais quand je regarde l'API le seul corps correspondant chose est « corps() "qui ne prend pas d'arguments. Alors, comment puis-je transmettre le contenu de mon message au service Web?

Merci pour votre aide!

+0

Notez que l'utilisation de 'Net :: HTTP' directement est l'une des nombreuses options. Voici quelques autres: https://www.ruby-toolbox.com/categories/http_clients –

Répondre

1

Vous avez response = Net::HTTP::Post.new(url.path) au lieu de request = Net::HTTP::Post.new(url.path) et add en-têtes avec add_field.

require 'net/http' 
require 'uri' 
url= URI.parse('http://10.29.3.47:8080/ingest') 
request = Net::HTTP::Post.new(url.path) 
request.add_field 'Content-Type', 'application/json' 
request.body = 'all of my xml data and schema which is far too long to type here' 
response = Net::HTTP.start(url.host, url.port) {|http| http.request(request)}