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

3
我正在使用Python的urllib2模块和Tor作为代理访问一个网站。当我打开该网站的主页面时,一切正常,但当我尝试查看登录页面(仅仅是查看)时,就会出现以下错误...
URLError: <urlopen error (10060, 'Operation timed out')>

为了对抗这种情况,我做了以下几点:
import socket
socket.setdefaulttimeout(None).

我仍然收到相同的超时错误。

  1. 这是否意味着网站在服务器端超时?(对于http进程我不是很了解,所以如果这是一个愚蠢的问题请原谅)
  2. 是否有任何方法可以纠正它,使Python能够查看该页面?

谢谢, 罗布

3个回答

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')

在尝试打开URL之前,您可能还想尝试覆盖代理设置,使用类似以下内容的东西:

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

谢谢回复。我已经构建并安装了代理处理程序,但我没有想到尝试更改用户代理。我尝试了,但没有改变任何东西。我也不认为它被明确地阻止,因为我能够访问主页。这个网站是否可能有一个设置的默认超时时间很短,而代理所需的额外时间导致超时? - user123304
我认为你提出的可能是有可能实现的,但不太可能。另一个需要考虑的选择是该网站正在执行反向查找,检测到您来自已知代理,随后断开您的连接。当我遇到Yahoo/Yahoo Mail类似问题时,我也曾遇到过这个问题,或者说这是我最好的猜测。您是否尝试过其他域名而没有问题? - Andrew
我已经尝试了其他域名,包括其他https域名,但我能够访问该网站上的许多页面,只是无法登录。这是否与执行反向查找的站点一致?谢谢, 罗布 - user123304
好的,我进一步测试了一下,我能够使用代理访问多个不同网站上的https,只是无法访问这个特定的网站。此外,我可以访问该特定网站上的任何http页面,但每当我尝试访问任何https页面时,都会收到超时错误。而且,如果我尝试访问要访问的站点上不存在的https页面(例如 https://www.domain-i-am-testing.com/sdljkfsjlkdflksdadj),我也会收到超时错误。 - user123304
最后,当我通过一个流行的在线代理打开登录页面时,我能够访问它,这让我觉得他们可能没有进行反向查找。 - user123304

0

我对Tor了解不够,无法确定超时是否发生在服务器端,而是可能发生在你和服务器之间的某个Tor节点上。如果是这种情况,除了重试连接外,你无能为力。


0
urllib2.urlopen(url[, data][, timeout])
可选的timeout参数指定了阻塞操作(如连接尝试)的超时时间,单位为秒(如果未指定,则使用全局默认超时设置)。实际上,这仅适用于HTTP、HTTPS、FTP和FTPS连接。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接