Python urllib2.urlopen将永远挂起,尽管超时
希望这是一个很简单的问题,但它让我发疯。 我正在ubuntu 12.10服务器的开箱即用安装上使用Python 2.7.3。我一直在关注这个问题,直到找到这个片段:Python urllib2.urlopen将永远挂起,尽管超时,python,http,timeout,settimeout,urllib2,Python,Http,Timeout,Settimeout,Urllib2,希望这是一个很简单的问题,但它让我发疯。 我正在ubuntu 12.10服务器的开箱即用安装上使用Python 2.7.3。我一直在关注这个问题,直到找到这个片段: import urllib2 x=urllib2.urlopen("http://casacinema.eu/movie-film-Matrix+trilogy+123+streaming-6165.html", timeout=5) 它只是永远挂起,从不超时。 我显然做错了什么。有人能帮忙吗? 非常感谢 Matteo看起来您遇到
import urllib2
x=urllib2.urlopen("http://casacinema.eu/movie-film-Matrix+trilogy+123+streaming-6165.html", timeout=5)
它只是永远挂起,从不超时。
我显然做错了什么。有人能帮忙吗?
非常感谢
Matteo看起来您遇到了代理问题。以下是关于如何解决此问题的一个很好的解释: 我已经用python 2.7.3在我的ubuntu上执行了你的代码,没有看到任何错误
也可考虑使用:
另见:urlib.request.urlopen
挂起。我不能说如何防止它被悬挂,但如果它能帮助某人,这就是为什么它可以被悬挂
pythonurllib/3.6
客户端很挑剔。例如,它期望服务器返回HTTP/1.1200ok
而不是http200ok
。它还希望服务器在发送头中的connection:close
时关闭连接
诊断此问题的最佳方法是获取服务器响应的原始输出,并将其与您知道有效的另一个服务器响应进行比较。然后,如果您必须创建一个服务器并操纵响应,则可以准确地确定差异的原因。也许,这至少会导致服务器上的更改并允许它不挂起。可以按照建议尝试使用socket.setdefaulttimeout(5) 插座和层 Python对从web获取资源的支持是分层的。urllib2使用httplib库,而httplib库又使用套接字库 从Python2.3开始,您可以指定套接字在超时之前等待响应的时间。这在必须获取网页的应用程序中非常有用。默认情况下,套接字模块没有超时,可以挂起。目前,在httplib或urllib2级别上未公开套接字超时。但是,可以使用全局设置所有套接字的默认超时
import socket
import urllib2
# timeout in seconds
timeout = 10
socket.setdefaulttimeout(timeout)
好。。我没有在我的服务器上配置任何代理。。。我不知道该怎么办。。如何检测是否存在应配置的代理?请注意,我在一个具有公共ip地址的web服务器上,这是从外部正确检测到的。它还可以毫不费力地加载其他网页。只有一些页面不会永远加载和挂起..谢谢。嗯,首先看看smth是否在
HTTP\u PROXY
env变量()中。您是否使用请求
尝试过代码?是的,我使用请求尝试过您的代码,它与另一个代码完全一样挂起。HTTP_PROXY env变量在我的系统上为空。。。!奇怪,不是吗?我也有同样的问题。很明显,这是urllib2中的一个bug。我很少在Python2.6.XIn中看到这一点。我的情况是防火墙问题。我的本地防火墙LuLu阻止了所有python请求。删除该规则解决了这个问题。
import socket
import urllib2
# timeout in seconds
timeout = 10
socket.setdefaulttimeout(timeout)