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
Interesting. I wonder if...
socket.socket = socks.socksocket
is causing _make_socket()
to get a non-standard socket, and in turn bulk. If you use PycURL instead does it work?
The problem is caused by the socket.socket = socks.socksocket
line.
As a temporary solution, one can keep a backup copy of socket.socket
and use that to unset the proxy before asking Tor for a new identity, then set up the proxy again.
The code will look like this:
import urllib2, socks, socket
from stem import Signal
from stem.control import Controller
old_socket = socket.socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
def newI():
socket.socket = old_socket # don't use proxy
with Controller.from_port(port=9051) as controller:
controller.authenticate()
controller.signal(Signal.NEWNYM)
# set up the proxy again
socket.socket = socks.socksocket
newI()
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()
However, I am still waiting for someone to post an explanation as to why the error occurs, and a better way to fix it.