2010-06-04 4 views
2

J'essaie de communiquer avec un service RESTful dans Rails. Il peut retourner des données dans différents formats, json et xml. Existe-t-il un moyen spécifique que je peux obtenir le type de données que je veux.Modification de l'en-tête HTTP dans Rails

Le service mentionne que ACCEPT doit être défini dans l'en-tête HTTP. Je ne suis pas sûr de savoir comment faire ça dans Ruby.

Actuellement, je fais pour obtenir

response = Net::HTTP.get(URI.parse(<url>)) 

Je ne sais pas sur la façon de modifier les informations d'en-tête pour cet appel. Toute aide est appréciée. Merci.

+0

L'URL est également composée d'un chemin et d'une requête. '/? ' –

Répondre

3

I ont obtenu fonctionner de cette façon

uri = URI(<domain>:<port>/<path>) 
params = { <query_hash> } 
headers = { <header_hash> } 

http = Net::HTTP.new(uri.host, uri.port) 
request = Net::HTTP::Get.new(uri.path) 
request.set_form_data(params) 
request = Net::HTTP::Get.new(uri.path+ '?' + request.body , headers) 
response = http.request(request) 

query_hash est toutes les requêtes de hachage ex: { "q" => "cats" } De même pour header_hash ex: { "ACCEPT" => "text/json" }

+0

+1 Vraiment sympa, cela devrait être plus upvoted. Il était difficile de trouver un exemple de travail simple. – Eduardo

0

Tout d'abord, vous devez créer un objet de session http:

http_session = Net::HTTP.new(URI.parse('...').to_s, 80) 

Ensuite, vous pouvez définir les en-têtes HTTP comme un hachage et de passer pour obtenir la méthode comme 2ème argument:

http_session.get('/resources', {'Accept' => 'application/xml+xhtml'}) 
+0

Dites mon URL est ' http: //desktop.domain.com: 28880/random/path? Something = other' Il jette une erreur lorsque j'ai essayé la première étape .. Y at-il quelque chose que je suis disparu? –

+0

Dans la première étape, vous devez passer domaine uniquement. Pas de chemin, pas de requête. Donc, vous devrez le réduire à la forme de 'http: //domain.tld' – Eimantas

0

Les paramètres et les en-têtes peuvent être définis de cette façon.

uri = URI.parse(<url>) 
uri.query = URI.encode_www_form('param1' => 'value1') 
req = Net::HTTP::Get.new(uri.to_s, {'header1' => 'value1'}) 

res = Net::HTTP.new(uri.host, uri.port).request(req) 
Questions connexes