Я выполняю python 2.6 с последним IPython на Windows XP SP3, и у меня есть два вопроса. Сначала одна из моих проблем, когда под IPython, я не могу ввести строки Unicode непосредственно, и, в результате не могу открыть файлы с нелатинскими именами. Позвольте мне продемонстрировать. В соответствии с обычным Python это работает:
>>> sys.getdefaultencoding()
'ascii'
>>> sys.getfilesystemencoding()
'mbcs'
>>> fd = open(u'm:/Блокнот/home.tdl')
>>> print u'm:/Блокнот/home.tdl'
m:/Блокнот/home.tdl
>>>
Это является кириллическим там, между прочим. И под IPython я добираюсь:
In [49]: sys.getdefaultencoding()
Out[49]: 'ascii'
In [50]: sys.getfilesystemencoding()
Out[50]: 'mbcs'
In [52]: fd = open(u'm:/Блокнот/home.tdl')
---------------------------------------------------------------------------
IOError Traceback (most recent call last)
C:\Documents and Settings\andrey\<ipython console> in <module>()
IOError: [Errno 2] No such file or directory: u'm:/\x81\xab\xae\xaa\xad\xae\xe2/home.tdl'
In [53]: print u'm:/Блокнот/home.tdl'
-------------->print(u'm:/Блокнот/home.tdl')
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (15, 0))
---------------------------------------------------------------------------
UnicodeEncodeError Traceback (most recent call last)
C:\Documents and Settings\andrey\<ipython console> in <module>()
C:\Program Files\Python26\lib\encodings\cp866.pyc in encode(self, input, errors)
10
11 def encode(self,input,errors='strict'):
---> 12 return codecs.charmap_encode(input,errors,encoding_map)
13
14 def decode(self,input,errors='strict'):
UnicodeEncodeError: 'charmap' codec can't encode characters in position 3-9: character maps to <und
In [54]:
Вторая проблема менее печальна, но все еще. Когда я пытаюсь открыть файл и определить аргумент имени файла как non-unicode строка, он не открывается. Я должен насильственно декодировать строку от набора символов OEM, прежде чем я мог открыть файлы, который довольно неудобен:
>>> fd2 = open('m:/Блокнот/home.tdl'.decode('cp866'))
>>>
Возможно, это имеет что-то к с моими региональными настройками, я не знаю, потому что я не могу даже вырезать и вставить кириллический текст от консоли. Я поместил "русский язык" везде в региональные настройки, но это, кажется, не работает.
Чем больше я думаю об этом, тем больше я думаю, что вы должны доверять своему хостингу. Я бы убедился, что хостинг-сервис имеет "шкуру в игре": то есть, что они размещают достаточно "громких" аккаунтов, которые будут признаны не заслуживающими доверия, будет очень дорого для них (в потерянных аккаунтах и продажах).
И независимо от того, считаете ли вы сервис хостинга заслуживающим доверия, у вас должен быть план на случай, если целевой аккаунт скомпрометирован. Кого вы уведомите, как вы отключите эту учетную запись, и т.д.
Единственное технологическое решение, которое я могу придумать - вы входите в систему вручную, захватить cookie и предоставить этот cookie в скрипт - защищает пароль, но, предположительно, враждебный хост может использовать этот cookie для нанесения любого ущерба, который он хотел бы получить в целевой системе, используя любые привилегии, прикрепленные к этому cookie, включая изменение вашего пароля. Так что это вообще не решение.
О, говоря о привилегиях: Может ли задача, которую необходимо автоматизировать, быть выполнена с целевой учетной записью с пониженными привилегиями, такой как учетная запись только для чтения, или с учетной записью, которая не может вносить какие-либо изменения в свой профиль? Наличие только ваших учетных данных с низкими привилегиями на хостинге снизит ваш риск (или "подверженность", как любит говорить полисиллабическая толпа).
Предыдущий ответ, который был признан неработоспособным, находится ниже строки.
Вы можете зашифровать идентификатор пользователя и пароль, используя еще один пароль. Для запуска скрипт должен быть снабжен паролем и . Этот пароль используется для расшифровки имени пользователя и пароля веб-службы. Убедитесь, что пароль скрипта не хранится нигде, а хранится только в памяти и только достаточно долго, чтобы расшифровать окончательный идентификатор пользователя и пароль.
Если это действительно важно, убедитесь, что ваше подключение для запуска скрипта является криптографическим (ssh, ssl и т.д.), и убедитесь, что скрипт использует только https для входа в систему.
Это не делает вас неуязвимым для кого-то с корневыми привилегиями в поле (в какой-то момент открытый идентификатор пользователя и пароль будут находиться в памяти и, следовательно, уязвимы), но для получения идентификатора пользователя/пароля им требуется больше работы.
Обновлено : Требование автоматизации делает вышеуказанное решение безупречным.
-121--5086039-Если вы только начали разработку с веб-сервисов, то вы должны посмотреть на servicestack.net это платформа веб-сервисов с открытым исходным кодом, которая уменьшает кривую обучения при создании и использовании веб-сервисов, вот "живой пример", показывающий вам весь исходный код, необходимый для создания и вызова простых веб-сервисов из приложений Ajax, Android iOS или Silverlight:
https://github.com/ServiceStackApps/LiveDemos
-121--4378754-Да. Ввод Юникода на консоли всегда проблематичен и, как правило, лучше избегать, но IPython особенно нарушен . Он преобразует символы, вводимые на его консоли, как если бы они были закодированы в ISO-8859-1, независимо от фактической кодировки.
На данный момент вам придется сказать u :/\u0411\u043b\u043e\u043a\u043d\u043e\u0442/home.tdl '
.