Уведомления

Группа в Telegram: @pythonsu

#1 Март 11, 2013 17:17:50

ReaL_HarDCorE
От:
Зарегистрирован: 2011-01-19
Сообщения: 84
Репутация: +  0  -
Профиль   Отправить e-mail  

HTTPS запросы в Python 1.4.5

Друзья! Пишу программу на питоне 1.4.5. Основная её функция - соединение с сервером по протоколу HTTPS (порт 443). Для этого использую модуль httplib. Вот код-пример одного запроса на сервер:

import httplib, base64, urllib
def tU(x): return unicode(x)
def fH(x): return x.decode('hex')
def tH(x): return x.encode('hex')
def fU8(x): return x.decode('u8')
def tU8(x): return x.encode('u8')
def fB64(x): return x.decode('base64')
def tB64(x): return x.encode('base64')
def YaDiskPropfind(method,url,body,headers):
    conn = httplib.HTTPSConnection("webdav.yandex.ru", port=443)
    conn.request(method=method,url=url,body=body,headers=headers)
    resp = conn.getresponse()
    print '%s - %s'%(str(resp.status),str(resp.reason))
    r=resp.read()
    return r
# Метод соединения
_method = 'PROPFIND / HTTP/1.1'
# Директория на сервере
_url = None
# Тело запроса
_body = """<D:propfind xmlns:D="DAV:">
   <D:prop>
      <D:quota-available-bytes/>
      <D:quota-used-bytes/>
   </D:prop>
</D:propfind>"""
# Заголовки с параметрами запроса
_headers = {
   "User-Agent": "Yandex Disk S60",
   "Content-Type": "text/xml",
   "Content-Length": str(len(_body)),
   "Host": "webdav.yandex.ru",
   "Accept": "*/*",
   "Depth": "0",
   "Authorization":
"Basic %s"%tB64("<ИМЯ_АККАУНТА>:<ПАРОЛЬ>")[:-1]
}
    
print tU(YaDiskPropfind(_method,_url,_body,_headers))

Этот код отлично работает у меня на Python Runtime (1.9.6), но на 1.4.5 он никак не может прочитать ответ от сервера, выдавая вот такую ошибку:

Traceback (most recent call last):
  File "E:\private\2000b1a5\default.py", line 81, in menu_action
    f()
  File "E:\private\2000b1a5\default.py", line 65, in query_and_exec
    execfile(script_list[index][1].encode('utf-8'), script_namespace.namespace)
  File "c:\python\FreeSpace.py", line 41, in ?
    print tU(YaDiskPropfind(_method,_url,_body,_headers))
  File "c:\python\FreeSpace.py", line 16, in YaDiskPropfind
    r=resp.read()
  File "E:\HTTPLIB.PY", line 239, in read
    s = self.fp.read()
  File "E:\HTTPLIB.PY", line 810, in read
    assert not self._line_consumed and self._line_left
AssertionError

Поковырявшись в исходниках некоторых модулей и на разных форумах, я узнал, что в 1.4.5 отсутствует модуль ssl, необходимый для HTTPS соединений м поэтому модуль HTTPLIB пытается обходиться без него и в результате чего вылетает такая ошибка. Третий день уже ничего с этим поделать не могу. Писать программу на PyS60 Runtime я не хочу, потому что в нём отсутствуют многие нужные мне модули.

Вопрос: Как в питоне 1.4.5 проделывать такие операции с HTTPS запросами безо всяких ошибок. Куда жать, чтобы работало всё? :)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version