Я пишу простой скрипт на Python, чтобы я мог тестировать свои сайты с другого IP-адреса.
URL-адрес страницы указан в строке запроса, скрипт извлекает страницу и отображает ее для пользователя. Приведенный ниже код используется для перезаписи тегов, содержащих URL-адреса, но я не думаю, что они полны / полностью корректны.
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
Идея заключается в том, что атрибуты href тега 'a' должны передаваться через прокси-скрипт, но не должны быть css, javascript, изображения, формы и т. Д., Поэтому они должны быть абсолютными, если они относительно на исходной странице.
Проблема в том, что код не всегда работает, CSS может быть написан несколькими способами и т. Д. Есть ли более полное регулярное выражение, которое я могу использовать?