Найти - Пользователи
Полная версия: SOAP, ZSI
Начало » Python для новичков » SOAP, ZSI
1
pochechyev
Всем дрясте!
Жизнь заставила работать с SOAP.
Нашел ZSI, все говорят что давно не поддерживается, не развивается, даже ходят слухи что где-то оно работает.
Я нихрена понятно не могу. Документации код наплакал и ту не понимаю.
Напрямую парсить xml не вариант - слишком много прийдется руками делать. Проще свою либу написать.

Вопрос1 - кто-то заставлял работать zsi? если да поделитесь примерами, ссылками, доками.
Вопрос2 - как еще можно работать с SOAP в питоне?


Спасибо.
dimabest
Я разбирался с ZSI, правда только как работать с WSDL. Вот тема http://python.su/forum/viewtopic.php?id=3771

ZSI действительно не поддерживается. Недели 3 назад я прочесал интернет на предмет свежих библиотек и нашел вкуснятину - suds. Хорошо понимает WSDL, очень “питоничный” интерфейс, отличная документация. Библиотека предназначена только для написания клиентов к веб-сервису.

https://fedorahosted.org/suds/
Александр Кошелев
Я для клиента использовал suds. Самая перспективная разработка на данный момент. Но там нет сервера.
pochechyev
Спасибо за советы.
Сейчас пытаюсь разбиратся.
Не могу понять как получить 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_res содержит в себе ответ xml-ответ сервера. где можно найти http hedears понять не могу, а это нужно для того чтобы в дальнейшем передать для вызова следующих методов.

Спасибо.
dimabest
Думаю, ты что-то попутал. Если веб-сервис реализовал метод Login, то ID сессии должен быть в SOAP-сообщении, а не http-заголовках.

print login_res
и смотри чё вернули.
pochechyev
print login_res
и смотри чё вернули.
в том что и дело что номер сессии лежит в заголовках HTTP а не в самом SOAP сообщении.

Вопрос остается: как получить http headers ?
dimabest
Веб-сервис ты писал что-ли? :)

Если запускается обычная сессия (ставится cookie), то suds кукисы вроде как передает.
Если ID сессии нужно передавать с каждым запросом к веб-сервису, то его должен возвращать либо метод Login(), либо любой метод веб-сервиса.

А ID, который ставится через куки и который нужно передавать явно при вызове методов - это ….

Может речь идет о soap headers? Это не http-заголовки.

Покажи документацию к веб-сервису.
pochechyev
Сервис - LanBilling.
soap hedears от http headers я еще отличаю.
Тоже надеялся, да и видел примеры, из которых следует что suds самостоятельно заботится о куках, но запросы не работают.
Расстроился и написал реализацию конкретно под задачу. Но все равно это костыли, нужно разобраться.
Вопрос актуален.
dimabest
почитал здесь 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)
cj - это объект класса cookielib.CookieJar()
он хранит куки, которые присылает сервер и используется разными библиотеками, например urllib2, чтобы отсылать их обратно.

Если после Login() тебе присылают ID в куках - читай их из объекта cj. Если в soap-сообщении (как написано по ссылке) - тем проще.
Далее просто - ставишь куку с нужными value, domain и path в объект cj.

Всё, кука будет отправляться сама
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB