J'utilise Python 2.7.3 et les requêtes. J'ai installé les demandes via pip. Je crois que c'est la dernière version. Je cours sur Debian Wheezy.
J'ai utilisé Requests de nombreuses fois dans le passé et je n'ai jamais rencontré ce problème, mais il semble que lorsque je fais des requêtes https avec Requests
, je reçois une exception InsecurePlatform
.
L'erreur mentionne urllib3
, mais je ne l'ai pas installée. Je l'ai installé pour vérifier s'il résolvait l'erreur, mais ce n'est pas le cas.
/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3
/util/ssl_.py:79: InsecurePlatformWarning: A true SSLContext object is not
available. This prevents urllib3 from configuring SSL appropriately and
may cause certain SSL connections to fail. For more information, see
https://urllib3.readthedocs.org/en/latest
/security.html#insecureplatformwarning.
Des idées quant à pourquoi je reçois ceci? J'ai vérifié la documentation, comme spécifié dans le message d'erreur, mais cette documentation dit d'importer urllib3 et de désactiver l'avertissement ou de fournir un certificat.
Utilisez la fonctionnalité security quelque peu cachée:
pip install requests[security]
ou pip install pyOpenSSL ndg-httpsclient pyasn1
Les deux commandes installent les paquets supplémentaires suivants:
Veuillez noter que ceci n'est pas requis pour python-2.7.9 + .
Si pip install
échoue avec des erreurs, vérifiez si les packages de développement requis pour libffi
, libssl
et python
sont installés sur votre système à l'aide du gestionnaire de packages de la distribution:
Debian/Ubuntu - python-dev
libffi-dev
libssl-dev
paquets.
Fedora - openssl-devel
python-devel
libffi-devel
packages.
_ {La liste de distribution ci-dessus est incomplète.
Solution de contournement ( voir la réponse d'origine de @TomDotTom ) :
Si vous ne pouvez pas installer certains des packages de développement requis, vous pouvez également désactiver cet avertissement:
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()
Si votre pip
est elle-même affectée par InsecurePlatformWarning
et ne peut rien installer à partir de PyPI, elle peut être corrigée avec ce guide étape par étape pour déployer manuellement des packages python supplémentaires.
Requests 2.6 a introduit cet avertissement pour les utilisateurs de python antérieurs à 2.7.9 avec uniquement des modules SSL en stock disponibles.
En supposant que vous ne puissiez pas passer à une version plus récente de python, cela installera davantage de bibliothèques SSL python à jour:
pip install --upgrade ndg-httpsclient
CEPENDANT, cela peut échouer sur certains systèmes sans les dépendances de construction de pyOpenSSL. Sur les systèmes Debian, exécuter cela avant la commande pip ci-dessus devrait être suffisant pour que pyOpenSSL puisse construire:
apt-get install python-dev libffi-dev libssl-dev
Je ne l'utilise pas en production, seulement quelques coureurs de test. Et pour réitérer la documentation urllib3
Si vous savez ce que vous faites et souhaitez désactiver ceci et autres avertissements
import requests.packages.urllib3
requests.packages.urllib3.disable_warnings()
Modifier/mettre à jour:
Ce qui suit devrait également fonctionner:
import logging
import requests
# turn down requests log verbosity
logging.getLogger('requests').setLevel(logging.CRITICAL)
Si vous êtes incapable de mettre à niveau votre version Python vers 2.7.9 et que vous souhaitez supprimer les avertissements,
vous pouvez rétrograder vos 'requêtes' version à la version 2.5.3:
Sudo pip install requests==2.5.3
À propos de la version: http://fossies.org/diffs/requests/2.5.3_vs_2.6.0/requests/packages/urllib3/util/ssl_.py-diff.html
Toutes les solutions présentées ici n'ont pas aidé (je suis contraint de python 2.6.6). J'ai trouvé la réponse dans un simple commutateur à passer à pip:
$ Sudo pip install --trusted-Host pypi.python.org <module_name>
Cela indique à pip qu'il est correct de récupérer le module à partir de pypi.python.org.
Pour moi, le problème est le proxy de mon entreprise derrière son pare-feu qui le fait ressembler à un client malveillant pour certains serveurs. Hourra la sécurité.
Je devais d'abord aller à bash
(de ZSH). ensuite
Sudo -H pip install 'requests[security]' --upgrade
résolu le problème.
si vous voulez juste arrêter les alertes non sécurisées comme:
/usr/lib/python3/dist-packages/urllib3/connectionpool.py:794: InsecureRequestWarning: une requête HTTPS non vérifiée est en cours. Ajouter la vérification du certificat est fortement conseillée. Voir: https://urllib3.readthedocs.org/fr/latest/security.html InsecureRequestWarning)
faire:
requests.METHOD("https://www.google.com", verify=False)
verify = False
est la clé, les suivants ne sont pas bons à cela:
requests.packages.urllib3.disable_warnings ()
ou
urllib3.disable_warnings ()
mais, vous DEVEZ savoir que cela pourrait entraîner des risques de sécurité potentiels.
Ne pas installer pyOpenSSL car il sera bientôt obsolète. La meilleure approche actuelle est-
import requests
requests.packages.urllib3.disable_warnings()
Cela m'est apparu sur Ubuntu 14.04 (avec Python 2.7.6) la semaine dernière après avoir fait un apt-get dist-upgrade
incluant libssl1.1:AMD64
à partir de deb.sury.org
.
Depuis que je lance certbot-auto renew
à partir d’un travail cron, j’utilise également le --no-self-upgrade
pour réduire la maintenance non planifiée. Cela semble avoir été la source du problème.
Pour corriger l'erreur, tout ce que je devais faire était de devenir root (avec le commutateur --login
de su
) et de laisser certbot-auto
se mettre à niveau. C'est à dire:
Sudo su --login
/usr/local/bin/certbot-auto renew
# ... Upgrading certbot-auto 0.8.1 to 0.18.2... blah blah blah ...
au lieu de ce qui fonctionne normalement depuis la crontab de root:
5 7 * * * /usr/local/bin/certbot-auto renew --quiet --no-self-upgrade
Après cela, Let'sencrypt renwals a fonctionné normalement à nouveau.
Voici comment cela fonctionne pour moi sur Python 3.6:
import requests
import urllib3
# Suppress InsecureRequestWarning: Unverified HTTPS
urllib3.disable_warnings()
Pour moi pas de travail j'ai besoin de mise à niveau pip ....
Debian/Ubuntu
installer des dépendances
Sudo apt-get install libpython-dev libssl-dev libffi-dev
mettre à niveau pip et installer des packages
Sudo pip install -U pip
Sudo pip install -U pyopenssl ndg-httpsclient pyasn1
Si vous voulez supprimer les dépendances
Sudo apt-get remove --purge libpython-dev libssl-dev libffi-dev
Sudo apt-get autoremove
Je viens d'avoir un problème similaire sur un serveur CentOS 5 où j'ai installé python 2.7.12 dans/usr/local par-dessus une version beaucoup plus ancienne de python2.7. La mise à niveau vers CentOS 6 ou 7 n'est pas une option sur ce serveur pour le moment.
Certains des modules python 2.7 existaient toujours de l'ancienne version de python, mais la mise à niveau de pip échouait car le package de cryptographie le plus récent n'était pas pris en charge par les packages CentOS 5.
Plus précisément, les «demandes d'installation de pip [sécurité]» échouaient car la version openssl sur CentOS 5 était 0.9.8e, qui n'est plus prise en charge par cryptographie> 1.4.0.
Pour résoudre le problème initial des PO, j'ai:
1) pip install 'cryptography<1.3.5,>1.3.0'.
Cette cryptographie installée 1.3.4 qui fonctionne avec openssl-0.9.8e. cryptograpy 1.3.4 est également suffisant pour satisfaire à l'exigence de la commande suivante.
2) pip install 'requests[security]'
Cette commande installe maintenant car elle n'essaie pas d'installer cryptography> 1.4.0.
Notez que sur Centos 5, je devais également:
yum install openssl-devel
Pour permettre à la cryptographie de se construire