如何强制urllib2超时?

Ale*_*lex 6 python urllib2

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

如果没有找到非常慢的互联网连接,我可以使用什么方法?

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

ʇsә*_*ɹoɈ 10

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

nc -l 80
Run Code Online (Sandbox Code Playgroud)

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


VKo*_*lev 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!"
Run Code Online (Sandbox Code Playgroud)

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