Использование контекстного управления для автоматического закрытия подключения через тор - PullRequest
0 голосов
/ 14 января 2020

Я пишу код python для исследовательского проекта в сети TOR. Прямо сейчас я подключаюсь к TOR со следующими вспомогательными функциями.

import requests
import subprocess
from stem import Signal
from stem.control import Controller


def _torUp():
    com = 'tor -f /path/to/torcc'.split()
    r = subprocess.run(com)

    return r

def _torDown():
    print('PREPARING TO SHUT DOWN TOR')
    with Controller.from_port(port=9051) as troll:
        troll.authenticate()
        troll.signal(Signal.SHUTDOWN)

def _createTorSession():
    torSession = requests.sessions.Session()

    torSession.proxies={
        'http': 'socks5h://localhost:9050',
        'https': 'socks5h://localhost:9050'
    }

    torSession.headers={
        'foo': 'bar'
    }

    return torSession

Затем я подключаюсь к TOR, делаю несколько запросов и затем завершаю работу.

_torUp()
torSession = _createTorSession()
resp = torSession.get('someurls')
_torDown()

Я хочу иметь возможность использовать контекстное управление с моей вспомогательной функцией, чтобы убедиться, что демон TOR завершает работу, когда код попадает в исключение или завершает свой процесс. Что-то вроде ...

with torSession() as tor:
    resp = tor.get('someurl')

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...