如何强制urllib2超时?

时间:2010-11-15 20:55:31

标签: python urllib2

我想测试我的应用程序在通过urllib2获取数据时对超时的处理,我希望有一些方法来强制请求超时。

如果找不到非常慢的互联网连接,我可以使用哪种方法?

我似乎记得一个有趣的应用程序/套件来模拟这些事情。也许有人知道链接?

5 个答案:

答案 0 :(得分:10)

我通常使用netcat来侦听本地机器的端口80:

nc -l 80

然后我在我的应用程序中使用http://localhost/作为请求URL。 Netcat将在http端口回答但不会给出回复,因此只要您在urllib2.urlopen()电话中指定了超时或致电socket.setdefaulttimeout(),该请求就会保证超时。

答案 1 :(得分:6)

你可以设置如上所示的默认超时,但是你可以使用两者的混合,因为Python 2.6中的urlopen方法中有一个超时选项:

import urllib2
import socket

try:
    response = urllib2.urlopen("http://google.com", None, 2.5)
except URLError, e:
    print "Oops, timed out?"
except socket.timeout:
    print "Timed out!"

urllib2的默认超时是无限的,导入套接字可确保您将超时作为socket.timeout异常捕获

答案 2 :(得分:3)

import socket 

socket.setdefaulttimeout(2) # set time out to 2 second.

如果要为每个请求设置超时,可以使用urlopen

的超时参数

答案 3 :(得分:0)

为什么不在bash中编写一个非常简单的CGI脚本,只需要在所需的超时时间内休眠?

答案 4 :(得分:0)

如果您在Mac上运行,speedlimit非常酷。

还有dummynet。这是更多的核心,但它也可以让你做一些更有趣的事情。这是一个pre-configured VM image

如果你已经在Linux机器上运行,那就是netem

我相信我听说过一个名为TrafficShaper的基于Windows的工具,但我还没有验证过。