Как перенаправить запросы urllib через сеть TOR?
Как перенаправить запросы urllib через сеть TOR?
Ответ 1
Это работает для меня (используя urllib2, не пробовал urllib):
def req(url):
    proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"})
    opener = urllib2.build_opener(proxy_support) 
    opener.addheaders = [('User-agent', 'Mozilla/5.0')]
    return opener.open(url).read()
print req('http://google.com')
		Ответ 2
Tor работает как прокси-сервер, не так ли? Поэтому спросите себя: "Как использовать прокси в urllib?"
Теперь, когда я смотрю на документы, первое, что я вижу, это
urllib.urlopen(url[, data[, proxies]])
который кажется мне очень наводящим на размышления...
Ответ 3
Мне удалось выполнить urlib.request для лукового URL-адреса. Я нашел решение на основе этого сообщения: Python 3.2: urllib, SSL и TOR через сокет: ошибка с функцией fileno
здесь находится модифицированный код:
import socks
import socket
# This function has no DNS resolve
# it need to use the real ip adress to connect instead of www.google.com
def create_connection_fixed_dns_leak(address, timeout=None, source_address=None):
    sock = socks.socksocket()
    sock.connect(address)
    return sock
# MUST BE SET BEFORE IMPORTING URLLIB
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
# patch the socket module
socket.socket = socks.socksocket
socket.create_connection = create_connection_fixed_dns_leak
from urllib import request
if __name__ == "__main__":
    for proxy in request.getproxies():
        print(str(proxy))
    url = 'http://url_of_hidden_service.onion:port'
    req = request.Request(url)
    res = request.urlopen(req)
    print(str(res.read()))