2016-10-05 28 views
-2

這段python代碼在一小時前運行良好,然後我對樹莓派進行了apt-get升級。自python 2.7更新以來的基本身份驗證錯誤urllib2

這是我現在的Python版本:Python的2.7.9(默認情況下,2016年9月17日,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)) 

但現在我得到這個錯誤:

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' 

我假設有所改變,但不知道什麼..

回答

1

你不能有一個新的行字符\n在你的頭部結束。而不是使用base64.encodestring,請使用base64.b64encode

我不認爲這有什麼用更新的Python,因爲這種行爲一直存在,因爲以base64模塊被列入早在Python 2.4中(見黑體字):

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

也做到了,謝謝你。我100%肯定,但它是由更新造成的某種程度上,因爲我有更舊的版本的python腳本來檢查和運行,代碼是相同的,因爲它以前和我有另一個樹莓派,還沒有適應升級,它在沒有錯誤的情況下運行。 – Floris

0

僅供參考 - 我相信,在功能上的變化可以追溯到此安全更新: 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