Python 运行刮擦前检查tor连接是否建立
在开始使用python scrapy爬行之前,我想检查tor。我正在linux上使用 通过此设置,scrapy可以在爬行时正确使用tor。我检查scrapy是否正确使用tor的方法是在myspider中爬行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
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由于缺乏使用或类似原因而闲置,休眠状态被描述为非零。