Comment faire une requête HTTP à l'aide de Ruby on Rails?
Je voudrais prendre des informations à partir d'un autre site web. Donc (peut-être) je devrais faire une demande sur ce site (dans mon cas, une requête HTTP GET) et de recevoir la réponse.
Comment puis-je faire cela en Ruby on Rails?
Si elle est possible, est-ce une bonne approche de l'utiliser dans mes contrôleurs?
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser Ruby
Net::HTTP
classe:Errno::ECONNREFUSED: Failed to open TCP connection to :80
erreur?Net::HTTP est construit en Ruby, mais avouons-le, il est souvent plus facile pas pour l'utilisation de sa lourdeur des années 1980 de style et d'essayer un niveau plus élevé alternative:
Net::HTTP
est lourd mais le compromis n'est pas la peine.OpenURI est le meilleur; c'est aussi simple que
response = open("http://example.com/").read
open-uri
ne suivent pas de redirections.file:///etc/passwd
Je préfère httpclient plus de Net::HTTP.
HTTParty est un bon choix si vous êtes à faire une classe qui est un client pour un service. C'est une pratique mixin qui vous donne 90% de ce que vous avez besoin. Voir comment court le Google et Twitter clients sont à la exemples.
Et pour répondre à votre deuxième question: non, je ne mettrais pas cette fonctionnalité dans un contrôleur--j'utiliserais un modèle à la place si possible d'encapsuler les détails (peut-être en utilisant HTTParty) et il suffit de l'appeler à partir du contrôleur.
Mon préféré deux façons de saisir le contenu de l'Url sont OpenURI ou Typhoeus.
OpenURI parce qu'il est partout, et Typhoeus, car il est très souple et puissant.
Voici le code qui fonctionne si vous faites une api REST appel derrière un proxy:
À l'aide de nice_http gem https://github.com/MarioRuiz/nice_http
Vous pouvez le faire en une seule ligne: