您的问题有两个方面-
- 使用Tor发出请求
- 根据要求更新连接(在您的情况下,在每次请求之后)
第1部分
第一个易于使用最新(v2.10.0或更高版本)的requests
库来完成,另外还需要requests[socks]
使用socks代理。
安装-
pip install requests requests[socks]
基本用法-
import requests
def get_tor_session():
session = requests.session()
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)
print(requests.get("http://httpbin.org/ip").text)
第2部分
要更新Tor IP,即拥有一个新的可见退出IP,您需要能够通过Tor IP连接到Tor服务ControlPort
,然后发送NEWNYM
信号。
ControlPort
默认情况下,正常Tor安装不会启用。您必须编辑torrc文件并取消注释相应的行。
ControlPort 9051
HashedControlPassword 16:05834BCEDD478D1060F1D7E2CE98E9C13075E8D3061D702F63BCD674DE
请注意,HashedControlPassword
以上是密码"password"
。如果要设置其他密码,请HashedControlPassword
注意以下位置的输出,以替换torrctor --hash-password "<new_password>"
中的<new_password>
是您要设置的密码。
................................................... ....................................
Windows用户警告:请参阅此处的帖子。
在Windows上存在一个问题,如果使用以下命令安装了tor,则torrc文件中的控制端口设置将被忽略:
tor --service install
要解决此问题,请在编辑torrc文件后,键入以下命令:
tor --service remove
tor --service install -options ControlPort 9051
................................................... ....................................
好的,现在我们已经正确配置了Tor,如果Tor已经在运行,则必须重新启动它。
sudo service tor restart
Tor现在应该在9051上启动并运行ControlPort
,我们可以通过它向其发送命令。我更喜欢使用官方的词干库来控制Tor。
安装-
pip install stem
您现在可以通过调用以下函数来更新Tor IP。
续订IP -
from stem import Signal
from stem.control import Controller
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)