python ignorer la validation de certificat urllib2
Je veux ignorer la certification validation
lors de ma demande au serveur avec un interne de l'entreprise lien.
Avec python requests
bibliothèque, je ferais ceci:
r = requests.get(link, allow_redirects=False,verify=False)
Comment puis-je faire de même avec urllib2 bibliothèque?
Vous devez vous connecter pour publier un commentaire.
urllib2 ne pas vérifier le certificat du serveur par défaut. Cochez cette de la documentation.
Edit: Comme l'a souligné dans les commentaires ci-dessous, ce n'est plus vrai pour les versions plus récentes (on dirait que >= 2.7.9) de Python. Reportez-vous ci-dessous RÉPONSE
En attendant urllib2 semble vérifier les certificats de serveur par défaut.
Le avertissement, qui a été montré dans le passé disparu pour 2.7.9 et j'ai actuellement rencontré ce problème dans un environnement de test avec un certificat auto-signé (et Python 2.7.9).
Mon mal solution de contournement (ne pas le faire dans de production!):
Selon les docs appel SSLContext constructeur directement devrait fonctionner, trop. Je n'ai pas essayé.
ssl.create_default_context
est uniquement disponible en Python 3.4+.HTTP Basic
l'authentification de l'information en même temps. Cette technique semble interférer avec l'aide deurllib2.install_opener(urllib2.build_opened(urllib2.HTTPBasicAuthHandler(mypwdmgr))
. Toutes les suggestions pour l'obtention de ces travailler ensemble?urllib2.HTTPSHandler(context=ctx)
comme argument supplémentaire poururllib2.build_opener
urllib2.install_opener(urllib2.build_opener(auth_handler, host_handler))
quand j'ai besoin de deux.urllib
(pas urllib2, que je n'ai pas essayer)ssl.create_default_context
était en fait disponible pour moi.La façon la plus simple:
python 2
python 3
from urllib.request import urlopen
au lieu deimport urllib2
. Voir la accepté de répondre à stackoverflow.com/questions/2792650/... pour plus d'info.Pour ceux qui utilise un ouvre-boîte, vous pouvez obtenir la même chose basé sur Enno Gröper de la grande réponse:
Et ensuite l'utiliser comme avant.
Selon build_opener et HTTPSHandler, un HTTPSHandler est ajouté si
ssl
module existe, ici, nous précisons notre propre place de celui par défaut.Selon @Enno Gröper après, j'ai essayé de la SSLContext constructeur et il fonctionne bien sur ma machine. code comme ci-dessous:
si vous avez besoin d'ouvreur, juste ajouté ce contexte comme:
NOTE: tous les environnement de test est python 2.7.12. J'utilise PROTOCOL_SSLv23 ici depuis le doc dit, d'autres protocole fonctionne aussi, mais cela dépend de votre machine et le serveur distant, veuillez consulter la doc pour plus de détails.
Plus explicite exemple, construit sur Damien code (appels une ressource de test à http://httpbin.org/). Pour python3. Notez que si le serveur redirige vers une autre URL,
uri
dansadd_password
doit contenir la nouvelle URL de la racine (il est possible de passer d'une liste d'URLs, aussi).