Python 运行刮擦前检查tor连接是否建立

Python 运行刮擦前检查tor连接是否建立,python,scrapy,tor,Python,Scrapy,Tor,在开始使用python scrapy爬行之前,我想检查tor。我正在linux上使用 通过此设置,scrapy可以在爬行时正确使用tor。我检查scrapy是否正确使用tor的方法是在myspider中爬行 class mySpider(scrapy.Spider): def start_requests(self): yield Request('https://check.torproject.org/', self.parse) def parse(s

在开始使用python scrapy爬行之前,我想检查tor。我正在linux上使用

通过此设置,scrapy可以在爬行时正确使用tor。我检查scrapy是否正确使用tor的方法是在myspider中爬行

class mySpider(scrapy.Spider): 
    def start_requests(self):
         yield Request('https://check.torproject.org/', self.parse)

    def parse(self, response):
         logging.info("Check tor page:" + str(response.css('.content h1::text')))

不过,我认为可能有更好/更干净的方法。我知道我可以,但我想实际检查tor连接是否正确建立。

一种确定的方法是连接到tor的控制端口并发出
GETINFO status/circuit esthed

如果Tor构建了有源电路,则其将返回:

250-status/circuit-established=1
250 OK
如果Tor有一段时间没有使用,则可能为0。您还可以调用
GETINFO-dormant
,这将产生
250-dormant=1
。最有可能的情况是,当您尝试使用Tor时,它将建立一个电路,休眠将变为0,而建立的电路将变为1,除非出现任何重大网络问题

在这两种情况下,休眠=0或电路建立=1应该足以告诉您可以使用Tor

这是一个简单的协议,因此您只需打开控制端口的套接字,进行身份验证并发出命令,或者从Stem使用


有关更多信息,请参阅。

感谢您的回复,我刚刚注意到twisted正在使用txtorcon而不是stem,所以我想scrapy正在使用txtorcon,所以我想我应该学习如何在txtorcon中获取信息,而不是像它那样。也可以使用它,但它是一个非常简单的基于命令的协议,对于这样的简单命令没有任何特殊的功能。然而,解析某些结果和知道如何识别消息的结尾会变得更加复杂。如果我正确理解
休眠
建立的电路
将分别返回1和0,如果Tor有一段时间没有使用。(1) 这些命令会唤醒你吗?(2) 如果不是的话,唤醒它的最佳方式是什么?仅仅向控制器询问这些信息并不能唤醒它。您可以使用
信号NEWNYM
唤醒它,方法是尝试解析地址
解析somehost.net
,或者打开SOCKS连接并发出请求(在发送请求之前,构建电路和建立连接会有一些小的延迟)。我不能绝对肯定地说,但我不认为如果你已经建立了电路,Tor可以处于休眠状态,因为如果Tor当前处于活动状态并正在构建电路,休眠状态被描述为
零;如果Tor由于缺乏使用或类似原因而闲置,休眠状态被描述为非零。