我想测试我的应用程序在通过urllib2获取数据时对超时的处理,我想用某种方法强制请求超时。如何强制urllib2超时?
找不到非常非常慢的互联网连接,我可以使用什么方法?
我似乎记得一个有趣的应用程序/套件模拟这些事情。也许有人知道这个链接?
我想测试我的应用程序在通过urllib2获取数据时对超时的处理,我想用某种方法强制请求超时。如何强制urllib2超时?
找不到非常非常慢的互联网连接,我可以使用什么方法?
我似乎记得一个有趣的应用程序/套件模拟这些事情。也许有人知道这个链接?
我通常使用netcat来听我的本地机器的端口80:
nc -l 80
然后我在我的应用程序中使用http://localhost/作为请求URL。 Netcat将在http端口回答,但不会回复,所以如果您在urllib2.urlopen()
呼叫中指定了超时或通过呼叫socket.setdefaulttimeout()
,则该请求将保证超时。
非常好。从来没有想到这一点! – 2010-11-15 21:06:35
我不得不使用:nc -l -p 80虽然好主意!谢谢。 – mhost 2012-11-08 20:17:23
是的,老版本的netcat有一些略有不同的命令行选项,IIRC。很高兴工作! – 2012-11-09 02:32:14
为什么不在bash中编写一个非常简单的CGI脚本,它只是在需要的超时时间内休眠?
您可以设置默认的超时时间,如上图所示,但你可以使用的混合既因为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异常
如果您在Mac上运行,speedlimit是非常酷。
还有dummynet。它更加强硬,但它也可以让你做一些更有趣的事情。这是一个pre-configured VM image。
如果你已经在Linux上运行,那么有netem。
我相信我听说过一种叫做TrafficShaper的基于Windows的工具,但那个我没有验证过。
这里是一个[slow_http_server.py'的代码示例](http://stackoverflow.com/a/32685765/4279) – jfs 2015-09-21 01:12:23