urrlib2.urlopen: "Nom ou service inconnu" persiste au démarrage du script sans connexion Internet
J'ai cette simple minime "de travail" de l'exemple ci-dessous qui ouvre une connexion à google toutes les deux secondes. Lorsque j'exécute ce script quand j'ai une connexion internet qui fonctionne, je reçois le message de Succès, et quand je puis de le déconnecter, je reçois le message d'erreur et quand je reconnectez à nouveau-je obtenir le Succès. Pour l'instant, donc bon.
Cependant, quand je lance le script lorsque l'internet est déconnecté, j'ai l'Échec de messages, et lorsque je me connecte plus tard, je n'ai jamais eu le message de Réussite. Je reçois l'erreur:
urlopen erreur [Errno -2] Nom ou le service ne sait pas
Ce qui se passe?
import urllib2, time
while True:
try:
print('Trying')
response = urllib2.urlopen('http://www.google.com')
print('Success')
time.sleep(2)
except Exception, e:
print('Fail ' + str(e))
time.sleep(2)
source d'informationauteur Ben Ruijl
Vous devez vous connecter pour publier un commentaire.
Cela se produit parce que le nom DNS "www.google.com" ne peut pas être résolu. Si il n'y a pas de connexion internet, le serveur DNS n'est probablement pas accessible pour résoudre cette entrée.
Il semble que j'ai mal lu votre question la première fois. Le comportement que vous décrivez est, sur Linux, une particularité de la glibc. Il ne lit que "/etc/resolv.conf" une fois, lors du chargement. la glibc ne peut être forcé à re-lire "/etc/resolv.conf" via le
res_init()
fonction.Une solution serait d'envelopper le
res_init()
de la fonction et de l'appeler avant d'appelergetaddrinfo()
(qui est utilisé, indirectement, parurllib2.urlopen()
.Vous pouvez essayer ce qui suit (toujours en supposant que vous êtes sous Linux):
Cela pourrait bien sûr être optimisée en attente jusqu'à ce que "/etc/resolv.conf" est modifiée avant d'appeler
res_init()
.Une autre solution serait d'installer par exemple nscd (service de nom démon de cache).
Pour moi, c'était un problème de proxy.
L'exécution de ce qui suit avant d'import urllib.demande aidé