Ejemplo n.º 1
0
class TorRequests:
    def __init__(self, hops_count=3, headers=None, auth_data=None):
        self._hops_count = hops_count
        self._headers = dict(headers) if headers else {}
        self._auth_data = dict(auth_data) if auth_data else auth_data

    def __enter__(self):
        """Create TorClient and connect to guard node."""
        self._tor = TorClient(auth_data=self._auth_data)
        self._guard = self._tor.get_guard()
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        """Close guard connection."""
        self._guard.close()
        self._tor.close()

    def send(self, method, url, data=None, **kwargs):
        with self.get_session() as s:
            r = Request(method, url, data, **kwargs)
            return s.send(r.prepare())

    @contextmanager
    def get_session(self, retries=0):
        adapter = TorHttpAdapter(self._guard,
                                 self._hops_count,
                                 retries=retries)
        with Session() as s:
            s.headers.update(self._headers)
            s.mount('http://', adapter)
            s.mount('https://', adapter)
            yield s
Ejemplo n.º 2
0
class Dark_Session(object):
    def __init__(self, use_tor=False):
        self.use_tor = use_tor
        if use_tor:
            self._tor = TorClient()
        self.new()

    def new(self):
        if self.use_tor:
            self._guard = self._tor.get_guard()
            adapter = TorHttpAdapter(self._guard, 3, retries=0)
            self.session = Session()
            self.session.mount('http://', adapter)
            self.session.mount('https://', adapter)
        else:
            self.session = Session()

    def get_ip(self):
        return self.session.get("http://httpbin.org/ip").json()["origin"]

    def post(self, *args, **kwargs):
        return self.session.post(*args, **kwargs)

    def get(self, *args, **kwargs):
        return self.session.get(*args, **kwargs)

    def close(self):
        self.session.close()
        if self.use_tor:
            self._guard.close()
        self.session = None
        self._guard = None