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:
ce qui me donne la réponse suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Lorsque je change l'url pour une autre en HTTPS, j'obtiens le résultat suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Après un peu de recherche sur le net et dans la doc d'urllib2,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
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:
et j'obtiens le même résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
Si quelqu'un pouvait m’éclairer sur ce que je fais mal, je lui en serai grandement reconnaissant.
merci par avance.
Partager