예제 #1
0
    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")
예제 #2
0
    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
예제 #3
0
 def test_create_agent(self):
     proxyEndpoint = TCP4ClientEndpoint(reactor, '127.0.0.1', 9050)
     agent = TrueHeadersSOCKS5Agent(reactor, proxyEndpoint=proxyEndpoint)