def prepare_request(self): """ Prepares request for submitting Saves the associated request with a temporary start time, mangles it, then saves the mangled version with an update start time. """ sendreq = self.request if context.in_scope(sendreq): mangle_macros = copy.copy(self.intercepting_macros) self.request.time_start = datetime.datetime.utcnow() if self.save_all: if self.stream_response and not mangle_macros: self.request.async_deep_save() else: yield self.request.async_deep_save() (sendreq, mangled) = yield macros.mangle_request(sendreq, mangle_macros) if sendreq and mangled and self.save_all: self.start_time = datetime.datetime.utcnow() sendreq.time_start = self.start_time yield sendreq.async_deep_save() else: self.log("Request out of scope, passing along unmangled") self.request = sendreq defer.returnValue(self.request)
def test_mangle_request_single(httprequest): orig_req = httprequest.copy() # in case it gets mangled macro = mock_int_macro(modified_req=('GET /modified HTTP/1.1\r\n\r\n')) expected_req = Request('GET /modified HTTP/1.1\r\n\r\n') (new_req, mangled) = yield macros.mangle_request(orig_req, {'testmacro': macro}) assert new_req == expected_req assert httprequest == orig_req assert httprequest.unmangled is None assert new_req.unmangled == orig_req assert mangled
def test_mangle_request_multiple(httprequest): orig_req = httprequest.copy() # in case it gets mangled macro = mock_int_macro(modified_req=('GET /cloud HTTP/1.1\r\n\r\n')) macro2 = CloudToButtMacro() intmacros = OrderedDict() intmacros['testmacro'] = macro intmacros['testmacro2'] = macro2 (new_req, mangled) = yield macros.mangle_request(orig_req, intmacros) expected_req = Request('GET /butt HTTP/1.1\r\n\r\n') assert new_req == expected_req assert httprequest == orig_req assert httprequest.unmangled is None assert new_req.unmangled == orig_req assert mangled
def prepare_request(self): """ Prepares request for submitting Saves the associated request with a temporary start time, mangles it, then saves the mangled version with an update start time. Also updates flags and values needed for submitting the request. """ from pappyproxy.pappy import session sendreq = self.request if context.in_scope(sendreq): mangle_macros = copy.copy(self.intercepting_macros) self.request.time_start = datetime.datetime.utcnow() if self.save_all: if self.stream_response and not mangle_macros: self.request.async_deep_save() else: yield self.request.async_deep_save() (mangreq, mangled) = yield macros.mangle_request(sendreq, mangle_macros) if mangreq is None: self.log("Request dropped. Closing connections.") self.request.tags.add('dropped') self.request.response = None self.dropped_request = True defer.returnValue(None) else: sendreq = mangreq if sendreq and mangled and self.save_all: self.start_time = datetime.datetime.utcnow() sendreq.time_start = self.start_time yield sendreq.async_deep_save() if session.config.http_proxy: self.use_as_proxy = True if (not self.stream_response) and self.sendback_function: self.data_defer.addCallback(self.sendback_function) else: self.log("Request out of scope, passing along unmangled") self.request = sendreq defer.returnValue(self.request)
def test_mangle_request_simple(httprequest): orig_req = httprequest.copy() # in case it gets mangled (new_req, mangled) = yield macros.mangle_request(orig_req, {}) assert new_req == orig_req assert httprequest == orig_req assert not mangled