Форум сайта python.su
0
Всем дрясте!
Жизнь заставила работать с SOAP.
Нашел ZSI, все говорят что давно не поддерживается, не развивается, даже ходят слухи что где-то оно работает.
Я нихрена понятно не могу. Документации код наплакал и ту не понимаю.
Напрямую парсить xml не вариант - слишком много прийдется руками делать. Проще свою либу написать.
Вопрос1 - кто-то заставлял работать zsi? если да поделитесь примерами, ссылками, доками.
Вопрос2 - как еще можно работать с SOAP в питоне?
Спасибо.
Офлайн
0
Я разбирался с ZSI, правда только как работать с WSDL. Вот тема http://python.su/forum/viewtopic.php?id=3771
ZSI действительно не поддерживается. Недели 3 назад я прочесал интернет на предмет свежих библиотек и нашел вкуснятину - suds. Хорошо понимает WSDL, очень “питоничный” интерфейс, отличная документация. Библиотека предназначена только для написания клиентов к веб-сервису.
https://fedorahosted.org/suds/
Офлайн
2
Я для клиента использовал suds. Самая перспективная разработка на данный момент. Но там нет сервера.
Офлайн
0
Спасибо за советы.
Сейчас пытаюсь разбиратся.
Не могу понять как получить 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")
Офлайн
0
Думаю, ты что-то попутал. Если веб-сервис реализовал метод Login, то ID сессии должен быть в SOAP-сообщении, а не http-заголовках.
print login_res
Офлайн
0
в том что и дело что номер сессии лежит в заголовках HTTP а не в самом SOAP сообщении.и смотри чё вернули.print login_res
Офлайн
0
Веб-сервис ты писал что-ли? :)
Если запускается обычная сессия (ставится cookie), то suds кукисы вроде как передает.
Если ID сессии нужно передавать с каждым запросом к веб-сервису, то его должен возвращать либо метод Login(), либо любой метод веб-сервиса.
А ID, который ставится через куки и который нужно передавать явно при вызове методов - это ….
Может речь идет о soap headers? Это не http-заголовки.
Покажи документацию к веб-сервису.
Офлайн
0
Сервис - LanBilling.
soap hedears от http headers я еще отличаю.
Тоже надеялся, да и видел примеры, из которых следует что suds самостоятельно заботится о куках, но запросы не работают.
Расстроился и написал реализацию конкретно под задачу. Но все равно это костыли, нужно разобраться.
Вопрос актуален.
Офлайн
0
почитал здесь 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)
Офлайн