Уведомления

Группа в Telegram: @pythonsu

#1 Март 5, 2010 15:35:19

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

SOAP, ZSI

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

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


Спасибо.



Офлайн

#2 Март 5, 2010 23:50:21

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

SOAP, ZSI

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

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

https://fedorahosted.org/suds/



Офлайн

#3 Март 6, 2010 01:30:12

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

SOAP, ZSI

Я для клиента использовал suds. Самая перспективная разработка на данный момент. Но там нет сервера.



Офлайн

#4 Март 10, 2010 16:12:30

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

SOAP, ZSI

Спасибо за советы.
Сейчас пытаюсь разбиратся.
Не могу понять как получить 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 понять не могу, а это нужно для того чтобы в дальнейшем передать для вызова следующих методов.

Спасибо.



Офлайн

#5 Март 10, 2010 20:25:59

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

SOAP, ZSI

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

print login_res
и смотри чё вернули.



Офлайн

#6 Март 11, 2010 13:32:53

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

SOAP, ZSI

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

Вопрос остается: как получить http headers ?



Офлайн

#7 Март 11, 2010 14:29:38

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

SOAP, ZSI

Веб-сервис ты писал что-ли? :)

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

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

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

Покажи документацию к веб-сервису.



Офлайн

#8 Март 11, 2010 17:53:47

pochechyev
От:
Зарегистрирован: 2008-02-29
Сообщения: 199
Репутация: +  0  -
Профиль   Отправить e-mail  

SOAP, ZSI

Сервис - LanBilling.
soap hedears от http headers я еще отличаю.
Тоже надеялся, да и видел примеры, из которых следует что suds самостоятельно заботится о куках, но запросы не работают.
Расстроился и написал реализацию конкретно под задачу. Но все равно это костыли, нужно разобраться.
Вопрос актуален.



Офлайн

#9 Март 11, 2010 19:00:21

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

SOAP, ZSI

почитал здесь 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.

Всё, кука будет отправляться сама



Отредактировано (Март 11, 2010 19:04:14)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version