I'm trying to connect to a resource using a tor, changing identity. But after the first connection attempt to change identity causes an error. Code:
import urllib2, socks, socket from stem import Signal from stem.control import Controller def newI(): with Controller.from_port(port=9051) as controller: controller.authenticate() controller.signal(Signal.NEWNYM) newI() socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050) socket.socket = socks.socksocket headers = {'User-Agent': 'Mozilla/3.0 (x86 [en] Windows NT 5.1; Sun)'} req = urllib2.Request('https://google.com', None, headers) response = urllib2.urlopen(req) html = response.read() newI()
I get error:
File "/media/all/Run/e/c.py", line 21, in newI() File "/media/all/Run/e/c.py", line 7, in newI with Controller.from_port(port=9051) as controller: File "/usr/local/lib/python2.7/dist-packages/stem/control.py", line 659, in from_port control_port = stem.socket.ControlPort(address, port) File "/usr/local/lib/python2.7/dist-packages/stem/socket.py", line 314, in __init__ self.connect() File "/usr/local/lib/python2.7/dist-packages/stem/socket.py", line 187, in connect self._socket = self._make_socket() File "/usr/local/lib/python2.7/dist-packages/stem/socket.py", line 340, in _make_socket control_socket.connect((self._control_addr, self._control_port)) File "/usr/lib/python2.7/dist-packages/socks.py", line 369, in connect self.__negotiatesocks5(destpair[0],destpair[1]) File "/usr/lib/python2.7/dist-packages/socks.py", line 236, in __negotiatesocks5 raise Socks5Error(ord(resp[1]),_generalerrors[ord(resp[1])]) TypeError: __init__() takes exactly 2 arguments (3 given)
Maybe I need to disable the proxy. Tell me how to do it correctly.
UPD:
With pycurl it's work:
import pycurl import cStringIO from stem import Signal from stem.control import Controller def newI(): with Controller.from_port(port=9051) as controller: controller.authenticate() controller.signal(Signal.NEWNYM) newI() buf = cStringIO.StringIO() c = pycurl.Curl() c.setopt(pycurl.URL, 'http://google.com/') c.setopt(c.WRITEFUNCTION, buf.write) c.setopt(pycurl.PROXY, 'localhost') c.setopt(pycurl.PROXYPORT, 9050) c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5) c.perform() html = buf.getvalue()[7:] buf.close() newI()