2017-03-28 6 views
-2

J'essaie de charger un fichier manifeste HLS m3u8 avec un certificat SSL inégalé. J'utilise la bibliothèque m3u8 pour Python. Mon script est le suivant:Python m3u8 ssl.CertificateError

#!/usr/bin/env python 
from urllib import quote 
import m3u8 
import ssl 

input_file = quote(raw_input("Please enter the input file path: "), safe=':''/') 

#try: 
manifest = m3u8.load(input_file) 
#except ssl.CertificateError: 
#print "WARNING SSL Error!" 
for playlist in manifest.playlists: 
     print playlist.uri 
     print playlist.stream_info.bandwidth 

Alors, quand je lance avec mon lien, il rapporte ssl.CertificateError car le certificat SSL est incorrect, mais je veux sauter cette vérification et seulement imprimer un avertissement SSL dans ce cas et continuez avec l'exécution du script. Est-ce possible et comment puis-je le faire?

J'ai changé mon script:

#!/usr/bin/env python 
from urllib import quote 
import m3u8 
import requests 

input_file = quote(raw_input("Please enter the input file path: "), safe=':''/') 

url = requests.get(input_file, verify = False) 

manifest = m3u8.load(url) 

for playlist in manifest.playlists: 
     print playlist.uri 
     print playlist.stream_info.bandwidth 

Mais maintenant, j'obtiens l'erreur suivante:

/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/connectionpool.py:852: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings 
    InsecureRequestWarning) 
Traceback (most recent call last): 
    File "./open.sh", line 10, in <module> 
    manifest = m3u8.load(url) 
    File "/usr/local/lib/python2.7/dist-packages/m3u8/__init__.py", line 44, in load 
    if is_url(uri): 
    File "/usr/local/lib/python2.7/dist-packages/m3u8/parser.py", line 337, in is_url 
    return re.match(r'https?://', uri) is not None 
    File "/usr/lib/python2.7/re.py", line 141, in match 
    return _compile(pattern, flags).match(string) 
TypeError: expected string or buffer 
+0

Vous aurez probablement besoin de lire la chose en premier et ensuite l'envoyer à votre analyseur. Voir http://stackoverflow.com/questions/15445981/how-do-i-disable-the-security-certificate-check-in-python-requests – pvg

+0

@pvg oui, je sais comment je peux contourner cette erreur en utilisant urllib ou demande des bibliothèques, mais je veux utiliser la bibliothèque m3u8 pour cela, et même si elle est basée sur urllib, elle ne supporte pas 'verify = False', je l'ai déjà essayé. –

+0

Vous avez essayé quoi? Quelle est votre question, alors? L'analyseur ne vous donne pas le contrôle dont vous avez besoin, vous ne pouvez pas continuer après avoir obtenu cette exception. Il suffit de lire les données et de les transmettre à l'analyseur, quel est le problème? – pvg

Répondre

0

Ce code semble fonctionner. Il montre également qu'il y a une erreur de certificat SSL dans le cas où le certificat SSL n'est pas approuvé.

#!/usr/bin/env python 
from urllib import quote 
import m3u8 
import requests 
import ssl 

in_file = quote(raw_input("Please enter the input file path: "), safe=':''/') 

try: 
     url = requests.get(in_file) 
except requests.exceptions.SSLError: 
     url = requests.get(in_file, verify = False) 
     print "Warning: SSL Certificate Error!!!" 
     print 
     pass 

manifest = m3u8.loads(url.text) 

for playlist in manifest.playlists: 
     print playlist.uri 
     print playlist.stream_info.bandwidth