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:

def http_request(url)
    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

Leave a reply

required

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>