J'écris un simple script python pour pouvoir tester mes sites Web à partir d'une adresse IP différente.Python Proxy Script
L'URL d'une page est donnée dans la chaîne de requête, le script extrait la page et l'affiche à l'utilisateur. Le code ci-dessous est utilisé pour réécrire les balises qui contiennent des URL mais je ne pense pas que ce soit complet/totalement correct.
def rel2abs(rel_url, base=loc):
return urlparse.urljoin(base, rel_url)
def is_proxy_else_abs(tag, attr):
if tag in ('a',):
return True
if tag in ('form', 'img', 'link') and attr in ('href', 'src', 'action', 'background'):
return False
def repl(matchobj):
if is_proxy_else_abs(matchobj.group(1).lower(), matchobj.group(3).lower()):
return r'<%s %s %s="http://%s?%s" ' %(proxy_script_url, matchobj.group(1), matchobj.group(2), matchobj.group(3), urllib.urlencode({'loc':rel2abs(matchobj.group(5))}))
else:
return r'<%s %s %s="%s" ' %(matchobj.group(1), matchobj.group(2), matchobj.group(3), rel2abs(matchobj.group(5)))
def fix_urls(page):
get_link_re = re.compile(r"""<(a|form|img|link) ([^>]*?)(href|src|action|background)\s*=\s*("|'?)([^>]*?)\4""", re.I|re.DOTALL)
page = get_link_re.sub(repl, page)
return page
L'idée est que « a » attributs href de la balise doivent être acheminés par le script proxy, mais css, javascript, images, formes etc ne doit pas être, si ceux-ci doivent être prises absolue si elles sont relatives à la page d'origine.
Le problème est le code ne fonctionne pas toujours, css peut être écrit de plusieurs façons, etc. Existe-t-il une expression rationnelle plus complète que je peux utiliser?
Probablement une question stupide, mais avez-vous envisagé d'écrire simplement un vrai proxy http? Avec un vrai proxy, vous ne devriez pas avoir à réécrire quoi que ce soit puisque votre navigateur sera explicitement configuré pour l'utiliser. Cela fonctionnera généralement beaucoup mieux et sera beaucoup plus facile à écrire. – Zoredache