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 : 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
ce qui me donne la réponse suivante:
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
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: 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 : 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
et j'obtiens le même résultat:
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.