def _setUp(self): super(HTTPTest, self)._setUp() try: import OpenSSL except: log.err("Warning! pyOpenSSL is not installed. https websites will " "not work") self.control_agent = TrueHeadersSOCKS5Agent( reactor, proxyEndpoint=TCP4ClientEndpoint(reactor, '127.0.0.1', config.tor.socks_port)) self.report['socksproxy'] = None if self.localOptions['socksproxy']: try: sockshost, socksport = self.localOptions['socksproxy'].split( ':') self.report['socksproxy'] = self.localOptions['socksproxy'] except ValueError: raise InvalidSocksProxyOption socksport = int(socksport) self.agent = TrueHeadersSOCKS5Agent( reactor, proxyEndpoint=TCP4ClientEndpoint(reactor, sockshost, socksport)) else: self.agent = TrueHeadersAgent(reactor) self.report['agent'] = 'agent' if self.followRedirects: try: self.control_agent = FixedRedirectAgent(self.control_agent) self.agent = FixedRedirectAgent( self.agent, ignorePrivateRedirects=self.ignorePrivateRedirects) self.report['agent'] = 'redirect' except: log.err("Warning! You are running an old version of twisted " "(<= 10.1). I will not be able to follow redirects." "This may make the testing less precise.") if len(self.contentDecoders) > 0: self.control_agent = ContentDecoderAgent(self.control_agent, self.contentDecoders) self.agent = ContentDecoderAgent(self.agent, self.contentDecoders) self.processInputs() log.debug("Finished test setup")
def _request(self, method, urn, genReceiver, bodyProducer=None, retries=3): if self.backend_type == 'onion': agent = TrueHeadersSOCKS5Agent(reactor, proxyEndpoint=TCP4ClientEndpoint( reactor, '127.0.0.1', config.tor.socks_port)) else: agent = Agent(reactor) attempts = 0 finished = defer.Deferred() def perform_request(attempts): uri = urljoin(self.base_address, urn) d = agent.request(method, uri, bodyProducer=bodyProducer, headers=Headers(self.base_headers)) @d.addCallback def callback(response): try: content_length = int( response.headers.getRawHeaders('content-length')[0]) except: content_length = None response.deliverBody(genReceiver(finished, content_length)) def errback(err, attempts): # We we will recursively keep trying to perform a request until # we have reached the retry count. if attempts < retries: log.err("Lookup failed. Retrying.") attempts += 1 perform_request(attempts) else: log.err("Failed. Giving up.") finished.errback(err) d.addErrback(errback, attempts) perform_request(attempts) return finished
def test_create_agent(self): proxyEndpoint = TCP4ClientEndpoint(reactor, '127.0.0.1', 9050) agent = TrueHeadersSOCKS5Agent(reactor, proxyEndpoint=proxyEndpoint)