-2

Dieses Stück Python-Code funktionierte vor einer Stunde gut, bevor ich ein Apt-Get-Upgrade auf meinem Raspberry Pi lief.Grundlegende Authentifizierung Fehler mit Urllib2 seit Python 2.7 Update

Dies ist nun meine Python-Version: Python 2.7.9 (Standard, 17. September 2016, 20:26:04)

import urllib, urllib2 
from PIL import Image 

URL="http://server.local/picture.jpg" 
headers = {'Authorization': 'Basic ' + base64.encodestring('Guess:Thepassword')} 
req = urllib2.Request(URL, None, headers) 
img=Image.open(urllib2.urlopen(req,timeout=1)) 

Aber ich habe jetzt diesen Fehler:

File "/usr/lib/python2.7/httplib.py", line 1017, in putheader 
raise ValueError('Invalid header value %r' % (one_value,)) 
ValueError: Invalid header value 'Basic TGlvbjpSdW5SYWJiaXRSdW4=\n' 

I Angenommen, etwas hat sich geändert, aber kann nicht herausfinden, was ..

Antwort

1

Sie können kein neues Zeilenzeichen \n am Ende Ihrer Kopfzeile haben. Verwenden Sie statt base64.encodestringbase64.b64encode.

Ich glaube nicht, dass dies etwas mit einem Update auf Python zu tun, da dieses Verhalten dort gewesen ist, da die base64-Modul wurde zurück in Python 2.4 (siehe fett gedruckte Text) enthält:

Encode the string s, which can contain arbitrary binary data, and return a string containing one or more lines of base64-encoded data. encodestring() returns a string containing one or more lines of base64-encoded data always including an extra trailing newline ('\n').

+0

das tat es, danke. Ich bin zu 100% sicher, aber es wurde irgendwie durch das Update verursacht, da ich ältere Versionen des Python-Skripts überprüfe und ausführe, wo der Code identisch ist wie zuvor UND ich noch einen raspberry Pi habe, noch nicht apt-get upgraded, wo es ohne den Fehler läuft. – Floris

0

FYI - ich glaube, kann die Änderung in der Funktionalität zu diesem Sicherheitsupdate zurückverfolgt werden: https://launchpad.net/ubuntu/+source/python2.7/2.7.6-8ubuntu0.3:

SECURITY UPDATE: CRLF injection vulnerability in the 
HTTPConnection.putheader 
- debian/patches/CVE-2016-5699.patch: disallow newlines in 
    putheader() arguments when not followed by spaces or tabs in 
    Lib/httplib.py, add tests in Lib/test/test_httplib.py 
- CVE-2016-5699