Skip to content

Instantly share code, notes, and snippets.

@akzhan
Forked from anonymous/habraproxy.py
Last active June 23, 2016 12:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save akzhan/9d593792ee7f58265ae54b4374644c95 to your computer and use it in GitHub Desktop.
Save akzhan/9d593792ee7f58265ae54b4374644c95 to your computer and use it in GitHub Desktop.
just for fun, not tested :)
# habraproxy.py — это простейший http-прокси-сервер, запускаемый локально (порт на ваше
# усмотрение), который показывает содержимое страниц Хабра. С одним исключением: после
# каждого слова из шести букв должен стоять значок «™». Примерно так:
#
# http://habrahabr.ru/company/yandex/blog/258673/
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# Сейчас на фоне уязвимости Logjam все в индустрии в очередной раз обсуждают проблемы и
# особенности TLS. Я хочу воспользоваться этой возможностью, чтобы поговорить об одной из
# них, а именно — о настройке ciphersiutes.
#
# http://127.0.0.1:8232/company/yandex/blog/258673/
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# Сейчас™ на фоне уязвимости Logjam™ все в индустрии в очередной раз обсуждают проблемы и
# особенности TLS. Я хочу воспользоваться этой возможностью, чтобы поговорить об одной из
# них, а именно™ — о настройке ciphersiutes.
#
# Условия:
# * Python 2.x
# * можно использовать любые общедоступные библиотеки, которые сочтёте нужным
# * чем меньше кода, тем лучше. PEP8 — обязательно
# * в случае, если не хватает каких-то данных, следует опираться на здравый смысл
#
# Если задача кажется слишом простой, можно добавить следующее:
# * параметры командной строки (порт, хост, сайт, отличный от хабра и т.п.)
# * после старта локального сервера автоматически запускается браузер с открытой
# обработанной™ главной страницей
import sys, os, re
import cherryproxy
class CherryProxy_onsix(cherryproxy.CherryProxy):
"""
Sample CherryProxy class demonstrating how to adapt a response.
"""
def filter_response(self):
if not isinstance(self.resp.data, str):
msg = 'Response blocked due to potentially non-str content'
self.log.warning(msg)
self.set_response_forbidden(reason=msg)
self.resp.data = re.sub(r"\b(\w{6})\b", r"\1™", self.resp.data);
cherryproxy.main(CherryProxy_onsix)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment