你的问题有两个方面-
- 使用 Tor 发出请求
- 根据要求更新连接(在您的情况下,在每次请求之后)
第 1 部分
第一个很容易使用最新的(v2.10.0 以上)requests 库完成,另外需要 requests[socks] 才能使用 socks 代理。
安装 -
pip install requests[socks]
基本用法 -
import requests
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
# Make a request through the Tor connection
# IP visible through Tor
session = get_tor_session()
print(session.get("http://httpbin.org/ip").text)
# Above should print an IP different than your public IP
# Following prints your normal public IP
print(requests.get("http://httpbin.org/ip").text)
第 2 部分
要更新 Tor IP,即拥有一个新的可见退出 IP,您需要能够通过它的 ControlPort 连接到 Tor 服务,然后发送 NEWNYM 信号。
默认情况下,普通 Tor 安装不启用 ControlPort。您必须编辑您的 torrc file 并取消注释相应的行。
ControlPort 9051
## If you enable the controlport, be sure to enable one of these
## authentication methods, to prevent attackers from accessing it.
HashedControlPassword 16:05834BCEDD478D1060F1D7E2CE98E9C13075E8D3061D702F63BCD674DE
请注意,上面的HashedControlPassword 是密码"password"。如果您想设置不同的密码,请注意 tor --hash-password "<new_password>" 的输出,其中 <new_password> 是您要设置的密码,替换 torrc 中的 HashedControlPassword。
.................................................. ..................................
Windows 用户警告:见帖子here。
如果使用以下命令安装 tor,则在 windows 上会忽略 torrc 文件中控制端口的设置:
tor --service install
要解决此问题,请在编辑您的 torrc 文件后,键入以下命令:
tor --service remove
tor --service install -options ControlPort 9051
.................................................. ..................................
好的,现在我们已经正确配置了 Tor,如果 Tor 已经在运行,你必须重新启动它。
sudo service tor restart
Tor 现在应该在 9051 ControlPort 上启动并运行,我们可以通过它向它发送命令。我更喜欢使用official stem library 来控制 Tor。
安装 -
pip install stem
您现在可以通过调用以下函数来更新 Tor IP。
更新IP -
from stem import Signal
from stem.control import Controller
# signal TOR for a new connection
def renew_connection():
with Controller.from_port(port = 9051) as controller:
controller.authenticate(password="password")
controller.signal(Signal.NEWNYM)
要验证 Tor 是否有新的退出 IP,只需重新运行第 1 部分中的代码。出于某种我不知道的原因,您需要创建一个新的 session 对象才能使用新 IP。
session = get_tor_session()
print(session.get("http://httpbin.org/ip").text)