How can I force urllib2 to time out?
我想在通过urllib2获取数据时测试我的应用程序处理超时,我想有一些方法来强制请求超时。
如果没有找到非常慢的互联网连接,我可以使用什么方法?
我似乎记得一个有趣的应用程序/套件来模拟这些事情。 也许有人知道链接?
我通常使用netcat来侦听本地机器的端口80:
1 | nc -l 80 |
然后我在我的应用程序中使用http:// localhost /作为请求URL。 Netcat将在http端口应答但不会给出响应,因此只要您在
你可以设置如上所示的默认超时,但是你可以使用两者的混合,因为Python 2.6在urlopen方法中有一个超时选项:
1 2 3 4 5 6 7 8 9 | 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异常捕获
1 2 3 | import socket socket.setdefaulttimeout(2) # set time out to 2 second. |
如果要为每个请求设置超时,可以使用urlopen的timeout参数
如果你在Mac上运行,speedlimit非常酷。
还有虚拟网络。这是更多的核心,但它也可以让你做一些更有趣的事情。这是预先配置的VM映像。
如果你已经在Linux机器上运行,那就是netem。
我相信我听说过一个名为TrafficShaper的基于Windows的工具,但我还没有验证过。
为什么不在bash中编写一个非常简单的CGI脚本,只需要在所需的超时时间内休眠?