Я пытаюсь использовать стебель, чтобы иметь небольшой скрипт, проходящий через Tor. Кажется, я не могу работать. Вот мой код:
import urllib.request
import re
from stem.connection import connect_port
from stem import Signal
from stem.control import Controller
controller = connect_port(port=9151)
def change():
controller.authenticate()
controller.signal(Signal.NEWNYM)
def getIp():
print (urllib.request.urlopen("http://my-ip.heroku.com").read(30).decode('utf-8'))
def connectTor():
controller = connect_port(port=9151)
controller.connect()
getIp()
if not controller:
sys.exit(1)
print("nope")
def disconnect():
controller.close()
if __name__ == '__main__':
connectTor()
getIP()
change()
getIp()
disconnect()
В принципе, все отображаемые IP-адреса одинаковы, когда теоретически все они должны быть разными. Что я могу сделать, чтобы этот код работал?
Чтобы использовать Tor, вам нужно направлять трафик через свой SocksPort (Tor действует как локальный прокси-сервер socks). В вашем коде выше вы ничего не пытаетесь заставить urllib пройти через Tor.
Примеры см. В руководствах по использованию клиентов Stem. Я не уверен, если SocksiPy или PycURL имеют аналоги Python 3.x. Если нет, вам нужно найти альтернативу.