使用tor来发出请求python?

时间:2018-02-17 13:14:15

标签: python-3.x python-requests tor

我使用requeststor完全是新手。

我正在使用的代码:

def get_tor_session():
    session = requests.session()
    # Tor uses the 9050 port as the default socks port
    session.proxies = {'http':  'socks5://127.0.0.1:9050',
                   'https': 'socks5://127.0.0.1:9050'}
    return session

session = get_tor_session()
print(session.get("http://httpbin.org/ip").text)

我一直收到以下错误:

  

引发ConnectionError(e,request = request)   requests.exceptions.ConnectionError:SOCKSHTTPConnectionPool(host =' httpbin.org',port = 80):url:/ ip超出了最大重试次数(由NewConnectionError引起(':无法建立新连接) :[WinError 10061]无法建立连接,因为目标计算机主动拒绝它',))

我查看了各种答案,但无法确定问题所在。

3 个答案:

答案 0 :(得分:2)

以下是适用于我的代码:

/admin

检查以确保Tor在您的计算机上运行,​​并且Windows / Defender上的防火墙未阻止您尝试访问的端口。

答案 1 :(得分:0)

我遇到了同样的问题,下面的解决方案解决了它。

SOCKSHTTPConnectionPool(host='httpbin.org', port=80)

根据这一行,你电脑的监听端口配置了80端口,需要改成你在torrc文件中配置的SOCKSPort,我的SOCKSPort=9050,默认CONTROL PORT设置为9051。 How to configure a tor proxy on windows? 此链接解释了如何配置 tor。 确保 Tor 浏览器在后台运行。 希望这些信息有帮助。

答案 2 :(得分:0)

您可以像这样更改代码:

def __init__(self):
    self.header = {'Content-Type': 'application/x-www-form-urlencoded'}

# ***** proxy *****#
def renew_connection(self):
    with db.Controller.from_port(port=9051) as controller:
        controller.authenticate(password='my_password')
        controller.signal(Signal.NEWNYM)
        controller.close()

def request_tor(self, url, headers, post_fields):
    self.renew_connection()
    session = requests.session()
    session.proxies = {}
    session.proxies['http'] = 'socks5h://localhost:9050'
    r = session.post(url, headers=headers, data=post_fields)