Try pour urllib

Fermé
cs_perrierbertrand Messages postés 34 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 10 mars 2024 - 14 mars 2021 à 22:43
cs_perrierbertrand Messages postés 34 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 10 mars 2024 - 15 mars 2021 à 18:19
Bonjour,

j'ai un programme python qui me renvoie mon adresse ip publique
p = urlopen('http://ip.42.pl/raw', timeout=20).read()

mais il arrive que le site ne réponde pas, ou qu'il y a un problème
alors j'ai mis en place try except
try:
ip = urlopen('http://ip.42.pl/raw', timeout=20).read()
except HTTPError as e:
print "HTTPError : Le serveur n a pas pu repondre a la demande."
print 'Code erreur : ', e.code
exit()
except URLError as e:
print "URLError : Nous n\'avons pas reussi a atteindre le serveur ."
print "Code erreur : ", e.reason
exit()


mais voici ce que ça me retourne, de temps en temps

Traceback (most recent call last):
File "/home/bertrand/linux/script/updatedns3.py", line 24, in <module>
ip = urlopen('http://ip.42.pl/raw', timeout=20).read()
File "/usr/lib/python2.7/urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 429, in open
response = self._open(req, data)
File "/usr/lib/python2.7/urllib2.py", line 447, in _open
'_open', req)
File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 1235, in http_open
return self.do_open(httplib.HTTPConnection, req)
File "/usr/lib/python2.7/urllib2.py", line 1208, in do_open
r = h.getresponse(buffering=True)
File "/usr/lib/python2.7/httplib.py", line 1178, in getresponse
response.begin()
File "/usr/lib/python2.7/httplib.py", line 452, in begin
version, status, reason = self._read_status()
File "/usr/lib/python2.7/httplib.py", line 408, in _read_status
line = self.fp.readline(_MAXLINE + 1)
File "/usr/lib/python2.7/socket.py", line 480, in readline
data = self._sock.recv(self._rbufsize)
socket.error: [Errno 104] Connection reset by peer

merci de vos futurs réponse

Configuration: Linux / Firefox 86.0


--
A voir également:

4 réponses

yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
14 mars 2021 à 23:42
bonjour,
es-tu certain d'avoir partagé tout ton programme?
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
15 mars 2021 à 00:09
as-tu une question?
tu n'expliques ni ce que tu demandes, ni ce que tu souhaites.
à tout hasard, tu pourrais ajouter ceci en fin de code:
except Exception as e:
	print("oups",e)

ou bien:
import urllib.request
try:
	ip = urllib.request.urlopen('http://ip.42.pl/raw', timeout=0.03).read()
	print(ip)
except urllib.request.socket.timeout as e:
	print (" Time-out .")
	exit()
except urllib.request.socket.error as e:
	print ("URLError : Une autre erreur avec le serveur .")
	exit()
except urllib.request.HTTPError as e:
	print ("HTTPError : Le serveur n a pas pu repondre a la demande.")
	print ('Code erreur : ', e.code)
	exit()
except urllib.request.URLError as e:
	print ("URLError : Nous n\'avons pas reussi a atteindre le serveur .")
	print ("Code erreur : ", e.reason)
except Exception as e:
	print("oups",e)
0
cs_perrierbertrand Messages postés 34 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 10 mars 2024
Modifié le 15 mars 2021 à 17:53
merci
oui je n'ai pas mis tout mon programme
le voici

#!/usr/bin/python
#doc [https://api.gandi.net/docs/livedns/]
import requests
import urllib.request
import smtplib    ## Importation du module
import datetime
from urllib2 import urlopen
from urllib2 import HTTPError
from urllib2 import URLError

 
headers = {'authorization': 'Apikey -------------------------------------'}


now = datetime.datetime.now()
print (now.strftime("%d/%m/%Y %H:%M:%S "))


# Recupere l'Ip externe
try:
 #page = urllib.urlopen("http://www.monip.org/").read()
 #ip = page.split("IP : ")[1].split("<br>")[0]
 ip = urllib.request.urlopen('http://ip.42.pl/raw', timeout=0.03).read()
except urllib.request.socket.timeout as e:
 print (" Time-out .")
 exit()
except urllib.request.socket.error as e:
 print ("URLError : Une autre erreur avec le serveur .")
 exit()
except urllib.request.HTTPError as e:
 print ("HTTPError : Le serveur n a pas pu repondre a la demande.")
 print ('Code erreur : ', e.code)
 exit()
except urllib.request.URLError as e:
 print ("URLError : Nous n\'avons pas reussi a atteindre le serveur .")
 print ("Code erreur : ", e.reason)
except Exception as e:
 print("oups",e)


print (ip)
#api gandy GET @
url = "https://api.gandi.net/v5/livedns/domains/bertrandperrier.fr/records/@/A"
response = requests.request("GET", url, headers=headers)
print("GET @")
print(response.text)


#api gandy GET www
url = "https://api.gandi.net/v5/livedns/domains/bertrandperrier.fr/records/www/A"
response = requests.request("GET", url, headers=headers)
print("GET www")
print(response.text)


#l'adresse ip est differente
if response.text.find(str(ip)) == -1:
 
 print ("*********************")
 print ("******ip differente, faire le PUT A******")
 print ("*********************")

 serveur = smtplib.SMTP('smtp.gmail.com', 587) ## Connexion au serveur sortant (en precisant son nom et son port)
 serveur.starttls() ## Specification de la securisation
 serveur.login("--------------------------", "----------------------")    ## Authentification
 message = "envoi d'un PUT "+str(ip)    ## Message a envoyer
 serveur.sendmail("------------------------@gmail.com", "------------------@laposte.net", message)    ## Envoie du message
 serveur.quit()    ## Deconnexion du serveur

 next_put = {"rrset_type" : "@", "rrset_values" : [str(ip)]}
 
 print("PUT A")
 print next_put
 url = "https://api.gandi.net/v5/livedns/domains/bertrandperrier.fr/records/@/A"
 response = requests.put(url, json=next_put, headers=headers)
 print("reponse du put A")
 print(response.text)

 next_put = {"rrset_type" : "www", "rrset_values" : [str(ip)]}
 
 print("PUT www")
 print next_put
 url = "https://api.gandi.net/v5/livedns/domains/bertrandperrier.fr/records/www/A"
 response2 = requests.put(url, json=next_put, headers=headers)
 print("reponse du put www")
 print(response2.text)

 serveur = smtplib.SMTP('smtp.gmail.com', 587) ## Connexion au serveur sortant (en precisant son nom et son port)
 serveur.starttls() ## Specification de la securisation
 serveur.login("---------------------", "------------------------")    ## Authentification
 message = "reponse des PUT. put1:"+response.text+". put2:"+response2.text    ## Message a envoyer
 serveur.sendmail("----------------@gmail.com", "----------------@laposte.net", message)    ## Envoie du message
 serveur.quit()    ## Deconnexion du serveur
else:
 print ("***********************")
 print ("******ip identique*****")
 print ("***********************")

EDIT : Correction des balises de code ( ajout du LANGAGE )

--
0
cs_perrierbertrand Messages postés 34 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 10 mars 2024
15 mars 2021 à 14:15
effectivement il me manquait

except urllib.request.socket.timeout as e:

--
0
yg_be Messages postés 22729 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
15 mars 2021 à 14:57
peux-tu alors marquer la discussion comme résolue?
0
cs_perrierbertrand Messages postés 34 Date d'inscription lundi 25 août 2003 Statut Membre Dernière intervention 10 mars 2024
Modifié le 15 mars 2021 à 18:22
je ne comprend plus rien
j'ai un erreur de librairie
bertrand@bertrand-X200CA:~/linux/script$ py /home/bertrand/linux/script/updatedns3.py
/usr/bin/py:16: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.9 it will stop working
from collections import Iterable
Traceback (most recent call last):
File "/usr/bin/py", line 167, in <module>
result = eval(args.expression)
File "<string>", line 1
/home/bertrand/linux/script/updatedns3.py
^
SyntaxError: invalid syntax



j'ai l'impression que le programme py ne fonctionne plus
--
0