Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2
- # -*- coding: utf-8 -*-
- from urllib2 import urlopen
- # Простой пример «анонимайзера».
- # Предупреждение: он не является полноценным и носит исключительно
- # демонстрационный характер с целью показать принцип работы.
- # Не использовать всерьёз.
- # И уж тем более не копировать отсюда код исправления ссылок.
- logo = '<div style="position: fixed; top: 0; left: 0; background-color: rgba(255, 32, 32, 0.7); padding: 0.5em">Anonymous</div>'
- def application(environ, start_response):
- # получаем URL, который необходимо загрузить
- url = environ['PATH_INFO'].lstrip('/')
- # скачиваем документ
- req = urlopen(url)
- data = req.read(2 * 1024 ** 3)
- if url.find('/', 8) < 0:
- baseurl = url + '/'
- else:
- baseurl = url[:url.find('/', 8)] + '/'
- # получаем тип документа
- ctype = req.headers.get('Content-Type', 'text/plain')
- ctype_short = ctype.split(';', 1)[0]
- # если это html или css, то исправляем ссылки, чтобы они вели на «анонимайзер»
- if ctype_short == 'text/html':
- for prefix in ('href="', 'src="', "href='", "src='"):
- data = data.replace(' %s//' % prefix, ' %shttp://' % prefix)
- data = data.replace(' %s/' % prefix, (' %s/' % prefix) + baseurl)
- for proto in ('http://', 'https://'):
- data = data.replace(' ' + prefix + proto, ' ' + prefix + '/' + proto)
- # добавляем плашку, уведомляющую об «анонимайзере»
- if '</body>' in data:
- data = data.replace('</body>', logo + '\n</body>')
- else:
- data += logo
- if ctype_short in ('text/html', 'text/css') or url.endswith('.css'):
- data = data.replace('url(//', 'url(http://')
- data = data.replace('url(/', 'url(/' + baseurl)
- for proto in ('http://', 'https://'):
- data = data.replace('url(' + proto, 'url(/' + proto)
- # отправляем ответ пользователю
- start_response('%d %s' % (req.code, req.msg), [('Content-Type', ctype), ('Content-Length', str(len(data)))])
- return [data]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement