Comme je le disais, je suis en train de porter des scripts PHP en Ruby pour un petit projet perso (dont j’ai d’ailleurs mis les sources en ligne sur mon compte github, j’ai du faire appel intensivement à curb, qui est l’interface ruby à la libcurl.
Et quand j’ai lu les exemples donnés par curb sur la page github, une chose m’a frappé: L’auteur a surement pensé que tout se passait pour le mieux et qu’aucune de ses requêtes n’allaient échouer. Je ne me suis pas laissé faire et j’ai voulu traiter les cas à erreurs, malgré la pauvreté de la documentation.
⇀ Limiter le temps d’une requête
Pour ne pas attendre indéfiniment la résolution d’une requête, on peut utiliser la propriété « timeout ». Il faudra dans ce cas être capable d’attraper l’exception qui sera levée en cas de problème:
curl_handler = Curl::Easy.new()
curl_handler.url = url
curl_handler.timeout = 3
curl_handler.follow_location = true
begin
curl_handler.http_get
rescue Exception => e
return nil
end
return curl_handler.body_str
end
⇀ Valeurs de retour
Curb permet non seulement de récupérer le body d’une requête (via body_str), mais également les headers (avec header_str). Encore moins documenté, on pourra utiliser response_code afin de ne pas parser les headers pour connaitre le code de retour:
curl_handler.http_get
resp = Hash[]
resp['code'] = curl_handler.response_code
if curl_handler.response_code == 200
resp['head'] = curl_handler.header_str
resp['body'] = curl_handler.body_str
end