Sunfox

Le journal de Sunny Ripert


EasouSpider le robot qui ne sait pas parler l’utf8

Photo de Mathieu mangeant une araignée

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.

Articles probablement reliés

Commenter


Vous pouvez avoir une jolie icône vous aussi en créant un gravatar.

Vous pouvez y saupoudrer de l'HTML5 avec les balises et suivantes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>.


:D Sunny Ripert

est un développeur web vivant à Paris.

CV, me contacter


Textes et contenus sous licence Creative Commons.
Site crée par mes soins et propulsé par WordPress.