Я работаю над кодом Python 2.7 для чтения значения с HTML-страницы с помощью библиотеки urllib2. Я хочу тайм-аут функция urllib2.urlopen через 5 секунд в случае отсутствия Интернета и переход к оставшемуся коду.
Оно работает, как и ожидалось, когда компьютер подключен к рабочему интернет-соединению. И для тестирования, если я установил timeout=0.1, время ожидания внезапно истекло без открытия URL-адреса, как и ожидалось. Но когда нет интернета, тайм-аут не работает либо я установил тайм-аут на 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:
180
Результат при подключении к Интернету со значением таймаута 0,1:
<urlopen error timed out>
Кажется, тайм-аут работает.
Результат, когда НЕТ подключен к Интернету и с любым значением тайм-аута (он истекает примерно через 40 секунд каждый раз, когда я открываю URL-адрес, несмотря на любое значение, которое я установил для timeout=:
<urlopen error [Errno -3] Temporary failure in name resolution>
Как можно отключить urllib2.urlopen по таймауту при отсутствии подключения к Интернету? Я что-то пропустил? Пожалуйста, помогите мне решить эту проблему. Спасибо!
Я открыл «sudo nano / etc / hosts» теперь, как я могу добавить имя к IP в etc / hosts, например, для моего данного URL-адреса? что мне писать в этом файле?
Вы пишете новую строку в файле, который начинается с IP-адреса хоста. Затем табуляция (или другой пробел), затем имя (а) хоста, которое вы хотите разрешить для этого IP-адреса. например 10.10.10.10 alfahd.witorbit.net (замена 10.10.... фактическим IP). См. этот вопрос из ask ubuntu.
Да, это решение сработало для меня. Большое спасибо..!






Поскольку разрешение имени происходит до того, как запрос будет сделан, он не зависит от тайм-аута. Вы можете предотвратить эту ошибку в разрешении имен, указав IP-адрес хоста в вашем файле /etc/hosts. Например, если хост - subdomain.example.com, а IP - 10.10.10.10, вы должны добавить следующую строку в файл /etc/hosts
10.10.10.10 subdomain.example.com
В качестве альтернативы вы можете просто использовать IP-адрес напрямую, однако некоторые веб-серверы требуют, чтобы вы использовали имя хоста, и в этом случае вам нужно будет изменить файл hosts, чтобы использовать имя в автономном режиме.
Сбой в разрешении имен происходит до запроса, поэтому я предполагаю, что разрешение имен не является предметом тайм-аута. Вы можете избежать этого, вручную разрешив имя в его IP-адрес в файле
/etc/hosts. Тогда ваш тайм-аут должен вести себя так, как ожидалось.