Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 30, 2010 14:12:57

akolesnikov
От:
Зарегистрирован: 2009-10-26
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

Надо пробовать.



Офлайн

#2 Окт. 30, 2010 14:39:15

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

А как этот paste ставить?



Офлайн

#3 Окт. 31, 2010 02:01:12

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

asilyator
zheromo, а можно так сделать вот что http://python.su/forum/viewtopic.php?id=8901 ?
import os

try:
import cPickle as pickle
except ImportError:
import pickle

from paste.proxy import TransparentProxy
from webob import Request, Response
from webob.exc import HTTPForbidden
from hashlib import md5

CACHE_DIR = 'c:/temp/cache'

class SimpleProxy(object):

def __init__(self, proxy):
self.proxy = proxy

def do_proxy(self, req, environ, start_response):
req.remove_conditional_headers()
resp = req.get_response(self.proxy)
resp.decode_content()
return resp

def __call__(self, environ, start_response):
req = Request(environ)
resp = self.do_proxy(req, environ, start_response)
return resp(environ, start_response)


class FileIterable(object):
def __init__(self, filename):
self.filename = filename
def __iter__(self):
return FileIterator(self.filename)

class FileIterator(object):
chunk_size = 4096
def __init__(self, filename):
self.fileobj = open(filename, 'rb')
def __iter__(self):
return self
def next(self):
chunk = self.fileobj.read(self.chunk_size)
if not chunk:
raise StopIteration
return chunk

def OKValidator(resp):
return resp.status_int == 200


class CachedProxy(SimpleProxy):

def __init__(self, proxy, resp_validator=OKValidator):
super(CachedProxy, self).__init__(proxy)
self.resp_validator = resp_validator

def do_proxy(self, req, environ, start_response):
filename = os.path.join(CACHE_DIR, md5(req.url).hexdigest())
if os.path.exists(filename+'-head'):
print 'GET', req.url
return self._load_response(filename)
else:
resp = super(CachedProxy, self).do_proxy(req, environ, start_response)
if self.resp_validator and self.resp_validator(resp):
print 'PUT', req.url
self._save_response(filename, resp)
return resp

def _save_response(self, filename, resp):
pickle.dump(self._pickle_response(resp), open(filename+'-head','wb'), -1)
open(filename+'-body','wb').write(resp.body)

def _load_response(self, filename):
resp = self._unpickle_response(pickle.load(open(filename+'-head','rb')))
resp.app_iter = FileIterable(filename+'-body')
return resp

def _pickle_response(self, res):
return dict(status=res.status_int, headerlist=res.headerlist)

def _unpickle_response(self, value):
return Response(**value)


def ImageValidator(resp):
return resp.status_int == 200 and \
resp.content_type.split('/')[0] == 'image'


def main():
app = CachedProxy(TransparentProxy(), ImageValidator)
from paste.httpserver import serve
serve(app, 'localhost', 3127)

if __name__ == '__main__':
main()
в этом примере кэшируются только изображения



Офлайн

#4 Окт. 31, 2010 02:02:29

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

asilyator
А как этот paste ставить?
pip install paste



Офлайн

#5 Окт. 31, 2010 02:12:37

asilyator
От:
Зарегистрирован: 2010-10-24
Сообщения: 276
Репутация: +  -2  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

Под виндой.
Уже наковырял easy_install, а как деинсталлить пакеты?



Отредактировано (Окт. 31, 2010 02:13:22)

Офлайн

#6 Окт. 31, 2010 02:51:05

zheromo
От:
Зарегистрирован: 2010-10-02
Сообщения: 356
Репутация: +  2  -
Профиль   Отправить e-mail  

Декодирование перехваченных http пакетов

мне больше нравится pip

easy_install pip

pip uninstall easy_install

:)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version