acces a une page HTTPS avec urllib
Bonjour,
Je voudrais accéder (via python) a une page en HTTPS.
Pour une page en HTTP, j'aurai fait de la manière suivante:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import urllib2
#
userAgent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
print "userAgent:", userAgent
#
url = "http://www.developpez.com"
## url = "https://wiki.python.org"
print "url:", url
#
headers = { "User-Agent" : userAgent }
myRequest = urllib2.Request(url, data=None, headers=headers)
#
try:
response = urllib2.urlopen(myRequest)
print "response.code, response.msg: %s, %s"%(response.code, response.msg)
except IOError, e:
if hasattr(e, 'code'): # HTTPError
print 'http error code: ', e.code
elif hasattr(e, 'reason'): # URLError
print "can't connect, reason: ", e.reason
else:
raise |
ce qui me donne la réponse suivante:
Code:
1 2 3
| userAgent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
url: http://www.developpez.com
response.code, response.msg: 200, OK |
Lorsque je change l'url pour une autre en HTTPS, j'obtiens le résultat suivant:
Code:
1 2 3
| userAgent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
url: https://wiki.python.org
can't connect, reason: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581) |
Après un peu de recherche sur le net et dans la doc d'urllib2,
je crois comprendre que ce qu'il manque, c'est le paramétrage de l'opener pour qu'il gère la connexion SSL.
Je fais l'essai suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| import urllib2
import ssl
#
userAgent = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
print "userAgent:", userAgent
#
## url = "http://www.developpez.com"
url = "https://wiki.python.org"
print "url:", url
#
headers = { "User-Agent" : userAgent }
myRequest = urllib2.Request(url, data=None, headers=headers)
# creation d'un opener configure pour une connexion SSL
# ???
context = ssl.create_default_context()
myHTTPSHandler = urllib2.HTTPSHandler(context=context)
myOpener = urllib2.build_opener(myHTTPSHandler)
urllib2.install_opener(myOpener)
#
try:
response = urllib2.urlopen(myRequest)
print "response.code, response.msg: %s, %s"%(response.code, response.msg)
except IOError, e:
if hasattr(e, 'code'): # HTTPError
print 'http error code: ', e.code
elif hasattr(e, 'reason'): # URLError
print "can't connect, reason: ", e.reason
else:
raise |
et j'obtiens le même résultat:
Code:
1 2 3
| userAgent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0
url: https://wiki.python.org
can't connect, reason: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581) |
:aie:
Si quelqu'un pouvait m’éclairer sur ce que je fais mal, je lui en serai grandement reconnaissant.
merci par avance.