-2

Этот кусочек кода на Python работал нормально час назад, прежде чем я запустил apt-get upgrade на моем малине pi.Базовая ошибка аутентификации с urllib2 с момента обновления python 2.7

Это теперь моя версия питона: Python 2.7.9 (по умолчанию, 17 Сентября 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)) 

Но теперь я получаю эту ошибку:

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 предположим, что что-то изменилось, но не может понять, что ..

ответ

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 для проверки и запуска, где код идентичен, как и раньше. И у меня есть еще один малиновый pi, еще не apt-get upgrade, где он работает без ошибки. – Floris

0

FYI - Я считаю, что изменение функциональности можно отнести к этому обновлению безопасности: 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 

 Смежные вопросы

  • Нет связанных вопросов^_^