Seite 1 von 1

Value Error "Empty certificate data" urllib2

Verfasst: Mittwoch 18. März 2015, 12:04
von sparrow
Hallo Forum,

ich möchte mit einer API im Internet sprechen. Das ist an sich kein Problem und sieht in etwa so aus:

Code: Alles auswählen

        data = urllib.urlencode({"names" : name})
        request = urllib2.urlopen(url=url, data=data)
        content = request.read()
Das funktioniert unter Linux problemlos.
Lasse ich das Programm unter Windows laufen, dann kommt es meistens in der urlopen-Zeile zu folgendem Fehler (angepasster Stacktrace):
<type 'exceptions.ValueError'>:
Empty certificate data
request = urllib2.urlopen(url=url, data=data)
File "C:\Python27\lib\urllib2.py", line 154, in urlopen
return opener.open(url, data, timeout)
File "C:\Python27\lib\urllib2.py", line 431, in open
response = self._open(req, data)
File "C:\Python27\lib\urllib2.py", line 449, in _open
'_open', req)
File "C:\Python27\lib\urllib2.py", line 409, in _call_chain
result = func(*args)
File "C:\Python27\lib\urllib2.py", line 1240, in https_open
context=self._context)
File "C:\Python27\lib\urllib2.py", line 1166, in do_open
h = http_class(host, timeout=req.timeout, **http_conn_args)
File "C:\Python27\lib\httplib.py", line 1200, in __init__
context = ssl._create_default_https_context()
File "C:\Python27\lib\ssl.py", line 427, in create_default_context
context.load_default_certs(purpose)
File "C:\Python27\lib\ssl.py", line 378, in load_default_certs
self._load_windows_store_certs(storename, purpose)
File "C:\Python27\lib\ssl.py", line 370, in _load_windows_store_certs
self.load_verify_locations(cadata=certs)
Das scheint ein Problem mit dem Zertifikat der SSL-Verbindung zu sein. Wenn ich danach suche, finde ich aber nur Einträge, die deutlich älter sind als die eingesetzte Python-Version.

Hat jemand eine Idee, wie ich das zum Laufen bringe?

Verwendetes Python:
Linux 2.7.6
Windows: 2.7.9

Re: Value Error "Empty certificate data" urllib2

Verfasst: Montag 23. März 2015, 08:53
von sparrow
Ich konnte das Problem etwas eingrenzen.

Das scheint sich dabei um ein Problem mit der "Umgebung" zu handeln.
Möglicherweise versucht Pyhton hier Zertifikate zu verwenden, die irgendwo vom OS kommen müssten.

Der oben beschriebene Fehler trat nur bei einer Maschine auf.
Er tritt bei mir aber auch auf, wenn ich mit wine Python installiere, ausführe und einen urllib2-request an eine https-Seite schicke, kommt ebenfalls dieser Fehler.
Daher gehe ich davon aus, dass es sich um ein Problem mit der Umgebung handelt, nicht mit Python.

Re: Value Error "Empty certificate data" urllib2

Verfasst: Montag 23. März 2015, 10:27
von Sirius3
@sparrow: genau, wie die Funktion _load_windows_store_certs schon andeutet, werden dort die Zeritfikate die im System hinterlegt sind geladen. Aus irgend einem Grund ist aber auf Deinen Systemen ein Zertifikat hinterlegt, das Python nicht lesen kann. Jetzt ist natürlich die Frage, wer Schuld ist, Python oder Windows?

Re: Value Error "Empty certificate data" urllib2

Verfasst: Montag 23. März 2015, 16:37
von DasIch
Von "nicht parsen können", kann man ja nicht wirklich reden, wäre dass der Fall würde die Exception wahrscheinlich anders aussehen. Es sieht eher danach aus als ob Python schon durchaus erkennt was passiert ist und sich hier bewusst dazu entscheidet eine Exception zu werfen.