我正在使用Python 2.7代码通过使用urllib2库从HTML页面读取值。 我想在没有互联网的情况下在5秒后超时 urllib2.urlopen函数并跳转到剩余的代码。
当计算机连接到正常工作的互联网连接时, 正常工作。如果我设置timeout=0.1
进行测试,它会在没有打开网址的情况下突然超时,正如预期的那样。 但是当没有互联网时,超时不起作用我将超时设置为0.1,5或任何其他值。它根本没有超时。
这是我的代码:
import urllib2
url = "https://alfahd.witorbit.net/fingerprint.php?n"
try:
response = urllib2.urlopen(url , timeout=5).read()
print response
except Exception as e:
print e
使用超时值5连接到Internet时的结果:
180
连接到Internet时超时值为0.1的结果:
<urlopen error timed out>
似乎超时正在运行。
当 NOT 连接到互联网并且具有任何超时值时的结果(尽管我为timeout=
设置了任何值,但每次打开网址时大约40秒后超时:
<urlopen error [Errno -3] Temporary failure in name resolution>
如果没有互联网连接,如何暂停 urllib2.urlopen ?我错过了什么吗?请指导我解决这个问题。谢谢!
答案 0 :(得分:0)
由于名称解析在请求发生之前发生,因此不受超时限制。您可以通过在/etc/hosts
文件中为主机提供IP来防止名称解析中出现此错误。例如,如果主机为subdomain.example.com
且IP为10.10.10.10
,您可以在/etc/hosts
文件中添加以下行
10.10.10.10 subdomain.example.com
或者,您可以直接使用IP地址,但是,某些Web服务器要求您使用主机名,在这种情况下,您需要修改hosts
文件以使该名称脱机。< / p>