Ces derniers jours je recevait une trentaine d’emails par jour m’indiquant qu’une erreur avait éclatée sur cults3d.com. Ces exceptions provenaient toutes d’un robot chinois, EasouSpider, qui parcoure le Web pour remplir son moteur de recherche.
Ce robot ne sait pas parler l’unicode comme tout le monde et envoie dans les formulaires des valeurs mal encodées, ce qui fâche Ruby on Rails. Le problème est surtout que Rails ne traite l’erreur que bien trop tard, lorsqu’on essaie de lire les paramètres de la requête. Et là l’erreur est une incompréhensible ArgumentError
:
invalid %-encoding (Q/B0*ÜHܘ0ÅÅ1 0 U GB1 0 U.…
La solution est de créer un middleware Rack qui va déclencher et traiter cette erreur avant que le reste de l’application ne reçoive la requête. Rails est fait de tas de petits modules comme celui-ci qui s’empilent et qui préparent la requête.
Pour ajouter facilement ce middleware à mon application j’ai créé une gemme Ruby, avec un nom particulièrement court. Pour régler ce problème dorénavant, il suffit d’ajouter à son Gemfile
:
gem "handle_invalid_percent_encoding_requests"
Depuis, plus aucun message d’erreur. Je dors beaucoup mieux la nuit.
est un développeur web vivant à Paris — Contact — Archives
Textes et contenus sous licence Creative Commons.