Я пишу код 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')
Спасибо.