Форум сайта python.su
Только начал изучать Python, установил интерпретатор, Qt …
Проблема возникла с установкой библиотеки для написания клиента к веб-сервису. Библиотека должна понимать wsdl-файлы. Поиск по интернету вывел на SOAPpy и ZSI. Первая из них не обновлялась уже 4 года, и для работы требует PyXML, которая вообще больше не поддерживается (PyXML is no longer maintained).
ZSI обновлялась 2 года назад и последняя поддерживаемая версия Питона - 2.5. Решил попробовать установить (у меня Python 2.6). Вроде бы установилась, но проверка работы из командной строки выдает ошибку и ничего не работает:
>>> from ZSI import ServiceProxy
C:\Python26\lib\site-packages\zsi-2.0-py2.5.egg\ZSI\resolvers.py:7: DeprecationWarning: the multifile module has been deprecated since Python 2.5
>>>
система:
Windows Vista
Python 2.6
Что делать? Устанавливать Python 2.5 что-ли?
Офлайн
Удалось установить SOAPpy (http://sourceforge.net/project/showfiles.php?group_id=26590&package_id=18246). При установке указывало на синтаксические ошибки в файлах пакета (!!), которые исправил ручками. Еще потребовало установить fpconst.
from SOAPpy import WSDL
proxy = WSDL.Proxy('path to WSDL')
WSDL-файлы читает, к веб-сервису запросы посылает…. Однако появилась новая проблема - непонятно как передавать параметры методам веб-сервиса, ибо параметры - не простые строки или числа, а объекты классов, описанных в WSDL-файле.
Я писал клиентов на PHP. Там вместо объекта передаем обычный ассоциативный массив (в Питоне - словарь), где имена ключей соответствуют именам полей класса. В PHP работает. В Питоне нет - Сервер ругается на неверный параметр.
Я писал клиентов на C#. Там Visual Studio из указанного WSDL-файла генерирует все классы и помещает в отдельный namespace (например WS). Далее все просто - создаем объекты нужных классов и вызываем методы, например так:
var client = new WS.СlientService();
var param = new WS.MethodParam();
param.username = “Dima”;
WS.MethodResult resp = client.method(param);
и т.д.
В Питоне вроде должно работать схожим образом, ибо proxy.inparams.type показывает, что параметр должен быть объектом класса. Однако как сгенерировать эти классы в SOAPpy? Документации нормальной не нашел, в интернете есть только примеры с простыми параметрами. Вообщем информации - кот наплакал.
Офлайн
Все, разобрался.
у меня Windows Vista (на XP все точно так же).
1. Устанавливаем Python 2.5
2. Устанавливаем модуль PyXML, который уже не поддерживается. По ссылке http://rants.ekanem.de/2007/05/01/pyxml-for-python-25/ скачиваем exe-шник для Python 2.5
3. Устанавливаем setuptools. По ссылке http://pypi.python.org/pypi/setuptools скачиваем exe-шник для Python 2.5
4. И, наконец, устанавливаем модуль ZSI для работы с веб-сервисами. По ссылке http://sourceforge.net/project/showfiles.php?group_id=26590&package_id=30660&release_id=483302 скачиваем ZSI-2.0-py2.5.egg. Из командной строки заходим в папку со скачанным файлом и набираем easy_install ZSI-2.0-py2.5.egg
Модули установлены. Теперь можно (если нужно) сгенерировать классы, описанные в WSDL-файле. К примеру WSDL доступен по адресу http://site.com/WebService.wsdl. Для этого в командной строке набираем:
wsdl2py -bu http://site.com/WebService.wsdl
Сгенерированные классы сохраняются в 2 файла - WebService_services.py и WebService_services_types.py.
Подключаем сгенерированные классы from WebService_services import * к своему коду и пишем Клиента на свой вкус ;).
Офлайн
Спасибо за подробный отчет :-).
> В Питоне нет - Сервер ругается на неверный параметр.
Как-то я тут химичил, уже не помню. Хотя. Сам WSDL особо никогда не пользовался. Т.е. все запросы выполнялись с простыми типами, а результаты как-то разбирал. Пользовался только SOAPpy.
Что касается PyXML, это расширение стандартного (из коробки) пакета xml. Подозреваю, что его просто включили в основную ветку, начиная с 2.6 (точно не знаю), что следовало бы сделать двумя минорными версиями раньше.
..bw
Офлайн
Большое спасибо за инструкцию !
правда пару пунктов пришлось докрутить:
“”
3. Устанавливаем setuptools. По ссылке http://pypi.python.org/pypi/setuptools скачиваем exe-шник для Python 2.5
“”
У меня стоял python2.6 и setuptools упрямо устанавливался к нему,
воспользовался инструкцией с http://pyobject.ru/blog/2006/12/21/cooking-python-eggs/
для прикручивания к нужной версии python
“”
4. И, наконец, устанавливаем модуль ZSI для работы с веб-сервисами. По ссылке http://sourceforge.net/project/showfile … _id=483302 скачиваем ZSI-2.0-py2.5.egg. Из командной строки заходим в папку со скачанным файлом и набираем easy_install ZSI-2.0-py2.5.egg
“”
С эти яйцом была ошибка, взял яйцо отсюда
http://pypi.python.org/simple/ZSI/
Офлайн
Я перешел на suds https://fedorahosted.org/suds/
Офлайн