Du mauvais usage de curl -X

closeCet article a été publié il y a 6 ans 11 mois 4 jours, il est donc possible qu’il ne soit plus à jour. Les informations proposées sont donc peut-être expirées.

Petite traduction aujourd’hui du développeur de curl, un article certes un peu ancien mais qui reste toujours d’actualité. curl est un outil diablement pratique qui fait partir du quotidien de tout administrateur système (et je l’espère aussi de développeurs). Et apparemment, il arrive régulièrement qu’on s’en serve mal, du moins c’est le sentiment de Daniel Stenberg.

Je commence à devenir fatigué de voir le web rempli d’exemples de ligne de commandes utilisant curl qui présentent un usage superflu du -X. Il est temps de rétablir la vérité.

-Tu viens au lit ? -Je peux pas. C’est important. -Quoi ? -Quelqu’un a tort sur Internet.

A partir de curl 7.45.0 (à paraître le 7 octobre 2015), l’outil va aider les utilisateurs à comprendre que leur utilisation de -X (ou –request) est souvent inutile ou même carrément mauvaise. Si vous spécifiez la même méthode avec -X qui sera de toute façon utilisée, et que vous avez activé le mode verbeux, curl va vous informer à ce sujet et vous pousser gentiment à arrêter de le faire.

Exemple :

L’option « tiret I majuscule » signifie qu’on demande à curl de faire une requête HEAD. Ajouter -X HEAD à cette ligne de commande fait qu’on le demande encore. Maintenant, cette séquence fera dire à curl :

Ça informera aussi l’utilisateur de manière similaire si vous faites un -XGET sur une requête standard ou -XPOST quand on utilise l’une des options de -d. Comme ceci :

curl va continuer de fonctionner exactement comme avant cependant, ces messages ne sont qu’informatifs et n’altèreront aucun comportement. Et ça ne se produira que si le mode verbeux est activé.

Ce que fait -X

Quand vous faites des requêtes HTTP avec curl, l’option -X change la chaîne de méthode au sein de la requête HTTP. C’est tout ce que ça fait. Ça ne change pas le comportement correspondant. C’est l’option parfaite quand vous voulez envoyer facilement une méthode DELETE ou TRACE ou toute autre méthode pour laquelle curl n’a pas de support natif. Vous pouvez aussi l’utiliser pour dire à curl d’envoyer un GET avec un corps de requête ou vous pouvez l’utiliser pour que l’option -d fonctionne si vous envoyez un PUT. Tous les bons usages.

Pourquoi l’usage superflu de -X est mauvais

Je connais plusieurs utilisateurs qui ne sont pas d’accord avec ça. C’est aussi pour ça que les messages ne s’affichent qu’en mode verbeux et qu’ils ne disent que « Note: » à ce propos. Pour l’instant.

Il y a quelques problèmes avec l’usage surperflu de -X dans curl:

L’un des problèmes les plus évidents est que si vous dites à curl de suivre les redirections (avec l’option -L ou –location), l’option -X sera aussi utilisée dans les requêtes de redirection ce qui pourrait ne pas être ce que le serveur demande et ce qu’attend l’utilisateur. Supprimer le -X fera en sorte que curl adhère à ce que le serveur demande. Et si vous voulez altérer la méthode à utiliser dans une redirection, curl a des options dédiées pour ça nommées –post301, –post302 et –post303 !

Mais même sans suivre de redirection, lancer simplement un -X « pour clarifier » conduit les utilisateurs à croire que -X a une fonction à remplir alors que ce n’est pas le cas. Ça conduit l’utilisateur ou l’utilisatrice à exploiter ce -X dans sa prochaine commande, qui pourrait ensuite utiliser les redirections ou autre chose d’autre qui ne serait pas approprié.

La plus grosse erreur que vous pouvez faire avec -X, et qui maintenant aboutit à un warning, c’est si vous utilisez -X HEAD sur une commande ordinaire (qui n’utilise pas -I). Comme ça :

…ce qui va faire que curl agit comme s’il envoyait un GET mais il envoie un HEAD. Une réponse à HEAD n’a jamais de corps, pourtant il envoie la taille du corps exactement comme une réponse à GET ce qui va conduire curl à attendre le corps de la réponse quand il n’arrivera tout simplement pas, et il va se planter là.

A partir de maintenant, voici l’alerte qui s’affichera avec la ligne de commande ci-dessus :


Voilà, maintenant je vais donc faire attention à ne pas utiliser -X abusivement. Et vous ?