The problem is that httplib.HTTPConnection
uses the socket
module’s create_connection
helper function which does the DNS request via the usual getaddrinfo
method before connecting the socket.
The solution is to make your own create_connection
function and monkey-patch it into the socket
module before importing urllib2
, just like we do with the socket
class.
import socks
import socket
def create_connection(address, timeout=None, source_address=None):
sock = socks.socksocket()
sock.connect(address)
return sock
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
# patch the socket module
socket.socket = socks.socksocket
socket.create_connection = create_connection
import urllib2
# Now you can go ahead and scrape those shady darknet .onion sites