Vérifier Ruby réponse HTTP pour le succès
Comment vérifier correctement la réponse de Net::HTTP::Get (par exemple) pour la "réussite" (c'est à dire, un 2xx code de retour)? La documentation semble être malheureusement le silence sur cette simple question.
J'ai:
response=Net::HTTP.new( host, port ).request my_get_request # details not important
Après un tas de Googler et quasi-aléatoire de frappe, j'ai enfin déterminé que cela fonctionne:
response.class < Net::HTTPSuccess
Est qu'en réalité la manière canonique de le faire?
Vous devez vous connecter pour publier un commentaire.
Pour
Net::HTTP
, oui, la vérification de la classe de l'objet de la réponse est la façon de le faire. À l'aide dekind_of?
est un peu plus clair (mais fonctionnellement équivalent à l'utilisation de<
):Appel
value
surresponse
mettra aussi à l'Net::HTTPError
si le code de statut n'a pas été un succès (ce qu'est un mal nommée méthode...).Si vous le pouvez, vous pouvez envisager d'utiliser un joyau au lieu de
Net::HTTP
, car ils offrent souvent une meilleure Api et de la performance. Typhoeus et HTTParty sont deux bons, entre autres.Net::HTTPRedirection
.304 Not Modified
, et ainsi souhaitez vérifier l'Net::HTTPRedirection
cas!204
response.body
estnil
. Donc, si vous voulez vérifier, commeis_a? Net::HTTPSuccess
vous devez utiliserresponse.body || ''
Vous pouvez prendre avantage de Ruby
case
déclaration qui idiomatique effectue classe comparaisons, grâce à son utilisation de === sous le capot.Voici un exemple à partir d'un JSON client qui attire notamment les erreurs mais sinon, retourne le message du serveur:
La remarque ci-dessus Net::HTTPResponse classes parent (par exemple
Net::HTTPServerError
) trop de travail.Si tout ce que vous cherchez à saisir est le code de statut HTTP de l'API externe ou site web, alors essayez
Net::HTTP.get_response
.Net::HTTP.get(url)
retourne une chaîne de caractères. Vous ne serez pas en mesure d'analyser facilement l'en-tête de réponse à partir d'elle: