Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 14, 2009 21:38:52

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Библиотека для написания клиента к веб-сервису, wsdl

Только начал изучать 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 что-ли?



Офлайн

#2 Фев. 15, 2009 15:56:28

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Библиотека для написания клиента к веб-сервису, wsdl

Удалось установить 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? Документации нормальной не нашел, в интернете есть только примеры с простыми параметрами. Вообщем информации - кот наплакал.



Офлайн

#3 Фев. 15, 2009 20:27:01

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Библиотека для написания клиента к веб-сервису, wsdl

Все, разобрался.

у меня 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 * к своему коду и пишем Клиента на свой вкус ;).



Офлайн

#4 Фев. 15, 2009 21:49:24

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

Библиотека для написания клиента к веб-сервису, wsdl

Спасибо за подробный отчет :-).

> В Питоне нет - Сервер ругается на неверный параметр.
Как-то я тут химичил, уже не помню. Хотя. Сам WSDL особо никогда не пользовался. Т.е. все запросы выполнялись с простыми типами, а результаты как-то разбирал. Пользовался только SOAPpy.

Что касается PyXML, это расширение стандартного (из коробки) пакета xml. Подозреваю, что его просто включили в основную ветку, начиная с 2.6 (точно не знаю), что следовало бы сделать двумя минорными версиями раньше.

..bw



Офлайн

#5 Ноя. 7, 2010 13:16:29

SUN
От:
Зарегистрирован: 2010-11-07
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Библиотека для написания клиента к веб-сервису, wsdl

Большое спасибо за инструкцию !

правда пару пунктов пришлось докрутить:
“”
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/



Офлайн

#6 Ноя. 8, 2010 00:21:04

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Библиотека для написания клиента к веб-сервису, wsdl

Я перешел на suds https://fedorahosted.org/suds/



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version