Форум сайта python.su
Всем дрясте!
Жизнь заставила работать с SOAP.
Нашел ZSI, все говорят что давно не поддерживается, не развивается, даже ходят слухи что где-то оно работает.
Я нихрена понятно не могу. Документации код наплакал и ту не понимаю.
Напрямую парсить xml не вариант - слишком много прийдется руками делать. Проще свою либу написать.
Вопрос1 - кто-то заставлял работать zsi? если да поделитесь примерами, ссылками, доками.
Вопрос2 - как еще можно работать с SOAP в питоне?
Спасибо.
Офлайн
Я разбирался с ZSI, правда только как работать с WSDL. Вот тема http://python.su/forum/viewtopic.php?id=3771
ZSI действительно не поддерживается. Недели 3 назад я прочесал интернет на предмет свежих библиотек и нашел вкуснятину - suds. Хорошо понимает WSDL, очень “питоничный” интерфейс, отличная документация. Библиотека предназначена только для написания клиентов к веб-сервису.
https://fedorahosted.org/suds/
Офлайн
Я для клиента использовал suds. Самая перспективная разработка на данный момент. Но там нет сервера.
Офлайн
Спасибо за советы.
Сейчас пытаюсь разбиратся.
Не могу понять как получить http хедеры (нужен номер сесии)
Делаю так:
from suds.client import Client
url = "http://10.1.0.36/money_trans/api3.wsdl"
client = Client(url)
login_res = client.service.Login("login", "password")
Офлайн
Думаю, ты что-то попутал. Если веб-сервис реализовал метод Login, то ID сессии должен быть в SOAP-сообщении, а не http-заголовках.
print login_res
Офлайн
в том что и дело что номер сессии лежит в заголовках HTTP а не в самом SOAP сообщении.и смотри чё вернули.print login_res
Офлайн
Веб-сервис ты писал что-ли? :)
Если запускается обычная сессия (ставится cookie), то suds кукисы вроде как передает.
Если ID сессии нужно передавать с каждым запросом к веб-сервису, то его должен возвращать либо метод Login(), либо любой метод веб-сервиса.
А ID, который ставится через куки и который нужно передавать явно при вызове методов - это ….
Может речь идет о soap headers? Это не http-заголовки.
Покажи документацию к веб-сервису.
Офлайн
Сервис - LanBilling.
soap hedears от http headers я еще отличаю.
Тоже надеялся, да и видел примеры, из которых следует что suds самостоятельно заботится о куках, но запросы не работают.
Расстроился и написал реализацию конкретно под задачу. Но все равно это костыли, нужно разобраться.
Вопрос актуален.
Офлайн
почитал здесь http://www.lanbilling.ru/api_test.html
“После авторизации можно использовать остальные функции API взаимодействия с сервером, добавив в заголовок запроса Set-Cookie: sessnum=идентификатор сессии, вернувшийся в ответ на авторизацию”
Бгг, видно что рагули писали :) заголовок Set-Cookie посылает сервер, а не клиент. Надеюсь что опечатались
В двух словах тебе нужно следующее:
from cookielib import Cookie
mycookie = Cookie(name="sessnum", value="", domain="", path="")
cj = client.options.transport.cookiejar
cj.set_cookie(mycookie)
Отредактировано (Март 11, 2010 19:04:14)
Офлайн