J'utilise NGINX pour segmenter le trafic mobile entre un site WAP/HTML mobile. On dirait que la meilleure façon de le faire sera de vérifier la préférence de l'UA pour le contenu en vérifiant l'en-tête HTTP Accept.Expression régulière correspondant à "wap" non précédée de "html"
Une préférence pour le protocole WAP est indiquée par l'apparition d'un type MIME "wap" dans l'en-tête avant un type "html" ou un type MIME générique.
Ainsi, un Sony Ericsson W300i a une préférence pour le WAP:
multipart/mixed, application/vnd.wap.multpart.mixed,applicatnoin/vnd.wap.xhtml_xml,application/xhtml+xml,text/ved.wap.wl,*/*,text/x-hdml,image/mng,/\image/x-mng,ivdeo/mng,video/x-mng,ima/gebmp,text/html
Et un Blackberry Bold a une préférence pour le HTML:
text/html,application/xhtml+xml,application/vnd.wap.xhtml+xml,application/vnd.wp.wmlc;q=0.9,application/vnd.awp.wmlscriptc;q=0.7,text/vnd.wap.wml;q=07,/vnd/.sun.j2me.app-descriptor,*/*;q=0.5
Depuis que je suis dans la terre Nginx, il semble que le meilleur outil que j'ai est les expressions régulières de NGINX (PCRE).
En ce moment je suis en train d'utiliser un négatif pour affirmer préanalyse « L'en-tête accepter contient WAP, mais pas par HTML précédée »:
(?!html.*)wap
Mais ce n'est pas correct. Y a-t-il une façon différente de penser à ce problème? Ou ma logique correspondante?
Jusqu'à présent, j'ai trouvé ces ressources utiles: regex
http://www.regular-expressions.info/completelines.html http://www.zytrax.com/tech/web/regex.htm http://wiki.nginx.org/NginxHttpRewriteModule
Merci!
Merci pour la réponse, voici les tests relatifs:
import re
prefers_wap_re = re.compile(r'^(?!(?:(?!wap).)*html).*?wap', re.I)
tests = [
('', False),
('wap', True),
('wap html', True),
('html wap', False),
]
for test, expected in tests:
result = prefers_wap_re.search(test)
assert bool(result) is expected, \
'Tested "%s", expected %s, got %s.' % (test, expected, result)
Je souhaite :) NGINX utilise PCRE qui ne supporte pas assertions lookbehind de longueur variable: [emerg]: pcre_compile() a échoué: lookbehind assertion n'est pas fixe longueur dans "(? jbox
@ jbox: J'ai mis à jour ma réponse. Est-ce que ça marche pour toi? –
Tentative, oui c'est le cas :) – jbox