使用Tor作为代理时Python urllib2超时?

3 投票
3 回答
3490 浏览
提问于 2025-04-15 12:16

我正在使用Python的urllib2,通过Tor作为代理来访问一个网站。当我打开这个网站的主页时,一切正常,但当我尝试查看登录页面(其实并不是要登录,只是想看看)时,我遇到了以下错误...

URLError: <urlopen error (10060, 'Operation timed out')>

为了解决这个问题,我做了以下操作:

import socket
socket.setdefaulttimeout(None).

但我仍然遇到同样的超时错误。

  1. 这是否意味着网站在服务器端超时了?(我对http过程了解不多,所以如果这个问题很傻请见谅)
  2. 有没有办法让我Python能够查看这个页面?

谢谢,
Rob

3 个回答

0

我对Tor了解得不够多,所以不能确定,但超时可能不是在服务器那边发生的,而是在你和服务器之间的某个Tor节点上发生的。如果真是这样,你也没什么办法,只能重新尝试连接。

0

urllib2.urlopen(url[, data][, timeout])

这个可选的timeout参数是用来设置连接时的超时时间,单位是秒。也就是说,如果在连接的时候超过了这个时间还没连上,就会停止尝试连接(如果没有设置这个参数,就会使用全局默认的超时时间)。需要注意的是,这个超时设置只对HTTP、HTTPS、FTP和FTPS的连接有效。

http://docs.python.org/library/urllib2.html

3

根据Python Socket 文档,默认情况下是没有超时设置的,所以如果你指定一个值为“None”,其实是多余的。

你的连接掉线可能有很多原因。其中一个可能是你的用户代理是“Python-urllib”,这可能会被封锁。要更改你的用户代理,可以使用以下代码:

request = urllib2.Request('site.com/login')
request.add_header('User-Agent','Mozilla/5.0 (X11; U; Linux i686; it-IT; rv:1.9.0.2) Gecko/2008092313 Ubuntu/9.04 (jaunty) Firefox/3.5')

在尝试打开网址之前,你可能还想先覆盖代理设置,可以用类似下面的代码:

proxy = urllib2.ProxyHandler({"http":"http://127.0.0.1:8118"})  
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)

撰写回答