urllib2.urlopen超时仅在连接到Internet时有效

时间:2018-03-26 19:34:47

标签: python python-2.7 timeout urllib2 raspbian

我正在使用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 ?我错过了什么吗?请指导我解决这个问题。谢谢!

1 个答案:

答案 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>