Я пытаюсь использовать Zeep для использования ресурса списка рассылки Sympa SOAP. У меня есть код ниже:
from zeep import Client, Settings
from zeep.transports import Transport
from requests import Session
session = Session()
settings = Settings(strict=False)
client = Client('https://lists.mycompany.com/lists/wsdl',
transport=Transport(session=session), settings=settings)
response = client.service.login(email='me',
password='memememememe.')
response = client.service.lists(topic="", subtopic="")
print(response)
Я не уверен, что должен содержать ответ от метода login
, но в отладчике PyCharm это None
. Я предполагаю, что шаг login
должен установить куки, но я не вижу доказательств этого.
Когда я тогда вызываю метод lists
, я получаю исключение, которое говорит, что пользователь не авторизован.
Есть ли какое-то соглашение о вызовах, которое я пропускаю?
Я нашел более старую, python2, SYMPA speci c библиотеку, которая работает, но я потратил так много времени на поиск в Zeep, что просто хочу чтобы понять, что я делаю неправильно.
Приветствия
Редактировать Я пропустил модуль Settings
в примере кода.
Edit 2
(venv) C:\Users\ME\PycharmProjects\SoapTest>python -mzeep https://lists.mycompany.com/lists/wsdl
C:\Users\ME\PycharmProjects\SoapTest\venv\lib\site-packages\zeep\wsdl\wsdl.py:338: UserWarning: The wsdl:message for '{https://lists.mycompany.com/lists/wsdl}whichResponse' contains an invalid part ('return'): invalid xsd type or elements
warnings.warn(str(exc))
C:\Users\ME\PycharmProjects\SoapTest\venv\lib\site-packages\zeep\wsdl\definitions.py:137: UserWarning: The wsdl:operation 'which' was not found in the wsdl:portType '{https://lists.mycompany.com/lists/wsdl}SympaPort'
warnings.warn(str(exc))
Prefixes:
xsd: http://www.w3.org/2001/XMLSchema
ns0: https://lists.mycompany.com/lists/wsdl
ns1: http://schemas.xmlsoap.org/soap/encoding/
Global elements:
ns1:Array(ns1:Array)
ns1:ENTITIES(ns1:ENTITIES)
ns1:ENTITY(ns1:ENTITY)
ns1:ID(ns1:ID)
ns1:IDREF(ns1:IDREF)
ns1:IDREFS(ns1:IDREFS)
ns1:NCName(ns1:NCName)
ns1:NMTOKEN(ns1:NMTOKEN)
ns1:NMTOKENS(ns1:NMTOKENS)
ns1:NOTATION(ns1:NOTATION)
ns1:Name(ns1:Name)
ns1:QName(ns1:QName)
ns1:Struct(ns1:Struct)
ns1:anyType(xsd:anyType)
ns1:anyURI(ns1:anyURI)
ns1:base64Binary(ns1:base64Binary)
ns1:boolean(ns1:boolean)
ns1:byte(ns1:byte)
ns1:date(ns1:date)
ns1:dateTime(ns1:dateTime)
ns1:decimal(ns1:decimal)
ns1:double(ns1:double)
ns1:duration(ns1:duration)
ns1:float(ns1:float)
ns1:gDay(ns1:gDay)
ns1:gMonth(ns1:gMonth)
ns1:gMonthDay(ns1:gMonthDay)
ns1:gYear(ns1:gYear)
ns1:gYearMonth(ns1:gYearMonth)
ns1:hexBinary(ns1:hexBinary)
ns1:int(ns1:int)
ns1:integer(ns1:integer)
ns1:language(ns1:language)
ns1:long(ns1:long)
ns1:negativeInteger(ns1:negativeInteger)
ns1:nonNegativeInteger(ns1:nonNegativeInteger)
ns1:nonPositiveInteger(ns1:nonPositiveInteger)
ns1:normalizedString(ns1:normalizedString)
ns1:positiveInteger(ns1:positiveInteger)
ns1:short(ns1:short)
ns1:string(ns1:string)
ns1:time(ns1:time)
ns1:token(ns1:token)
ns1:unsignedByte(ns1:unsignedByte)
ns1:unsignedInt(ns1:unsignedInt)
ns1:unsignedLong(ns1:unsignedLong)
ns1:unsignedShort(ns1:unsignedShort)
Global types:
xsd:anyType
ns1:Array(_value_1: ANY[], arrayType: xsd:string, offset: ns1:arrayCoordinate, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:ENTITIES(xsd:ENTITIES, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:ENTITY(xsd:ENTITY, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:ID(xsd:ID, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:IDREF(xsd:IDREF, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:IDREFS(xsd:IDREFS, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:NCName(xsd:NCName, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:NMTOKEN(xsd:NMTOKEN, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:NMTOKENS(xsd:NMTOKENS, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:NOTATION(xsd:QName, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:Name(xsd:Name, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:QName(xsd:QName, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:Struct(_value_1: ANY[], id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:anyURI(xsd:anyURI, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:arrayCoordinate
ns1:base64
ns1:base64Binary(xsd:base64Binary, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:boolean(xsd:boolean, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:byte(xsd:byte, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:date(xsd:date, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:dateTime(xsd:dateTime, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:decimal(xsd:decimal, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:double(xsd:double, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:duration(xsd:duration, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:float(xsd:float, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:gDay(xsd:gDay, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:gMonth(xsd:gMonth, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:gMonthDay(xsd:gMonthDay, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:gYear(xsd:gYear, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:gYearMonth(xsd:gYearMonth, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:hexBinary(xsd:hexBinary, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:int(xsd:int, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:integer(xsd:integer, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:language(xsd:language, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:long(xsd:long, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:negativeInteger(xsd:negativeInteger, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:nonNegativeInteger(xsd:nonNegativeInteger, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:nonPositiveInteger(xsd:nonPositiveInteger, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:normalizedString(xsd:normalizedString, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:positiveInteger(xsd:positiveInteger, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:short(xsd:short, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:string(xsd:string, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:time(xsd:time, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:token(xsd:token, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:unsignedByte(xsd:unsignedByte, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:unsignedInt(xsd:unsignedInt, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:unsignedLong(xsd:unsignedLong, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns1:unsignedShort(xsd:unsignedShort, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
xsd:ENTITIES
xsd:ENTITY
xsd:ID
xsd:IDREF
xsd:IDREFS
xsd:NCName
xsd:NMTOKEN
xsd:NMTOKENS
xsd:NOTATION
xsd:Name
xsd:QName
xsd:anySimpleType
xsd:anyURI
xsd:base64Binary
xsd:boolean
xsd:byte
xsd:date
xsd:dateTime
xsd:decimal
xsd:double
xsd:duration
xsd:float
xsd:gDay
xsd:gMonth
xsd:gMonthDay
xsd:gYear
xsd:gYearMonth
xsd:hexBinary
xsd:int
xsd:integer
xsd:language
xsd:long
xsd:negativeInteger
xsd:nonNegativeInteger
xsd:nonPositiveInteger
xsd:normalizedString
xsd:positiveInteger
xsd:short
xsd:string
xsd:time
xsd:token
xsd:unsignedByte
xsd:unsignedInt
xsd:unsignedLong
xsd:unsignedShort
ns0:ArrayOfLists(_value_1: listType[], arrayType: xsd:string, offset: ns1:arrayCoordinate, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns0:ArrayOfString(_value_1: string[], arrayType: xsd:string, offset: ns1:arrayCoordinate, id: xsd:ID, href: xsd:anyURI, _attr_1: {})
ns0:bounce(firstBounceDate: xsd:int, lastBounceDate: xsd:int, bounceCount: xsd:int, bounceScore: xsd:int)
ns0:listType(listAddress: xsd:string, homepage: xsd:string, isSubscriber: xsd:boolean, isOwner: xsd:boolean, isEditor: xsd:boolean, subject: xsd:string, firstBo
unceDate: xsd:int, lastBounceDate: xsd:int, bounceCount: xsd:int, bounceCode: xsd:int)
Bindings:
Soap11Binding: {https://lists.mycompany.com/lists/wsdl}SOAP
Service: SympaSOAP
Port: SympaPort (Soap11Binding: {https://lists.mycompany.com/lists/wsdl}SOAP)
Operations:
add(list: xsd:string, email: xsd:string, gecos: xsd:string, quiet: xsd:boolean) -> return: xsd:boolean
amI(list: xsd:string, function: xsd:string, user: xsd:string) -> return: xsd:boolean
authenticateAndRun(email: xsd:string, cookie: xsd:string, service: xsd:string, parameters: ns0:ArrayOfString) -> return: ns0:ArrayOfString
authenticateRemoteAppAndRun(appname: xsd:string, apppassword: xsd:string, vars: xsd:string, service: xsd:string, parameters: ns0:ArrayOfString) -> return
: ns0:ArrayOfString
casLogin(proxyTicket: xsd:string) -> return: xsd:string
checkCookie() -> email: xsd:string
closeList(list: xsd:string) -> return: xsd:boolean
complexLists() -> return: ns0:ArrayOfLists
complexWhich() -> return: ns0:ArrayOfLists
createList(list: xsd:string, subject: xsd:string, template: xsd:string, description: xsd:string, topics: xsd:string) -> return: xsd:boolean
del(list: xsd:string, email: xsd:string, quiet: xsd:boolean) -> return: xsd:boolean
getUserEmailByCookie(cookie: xsd:string) -> return: xsd:string
info(listName: xsd:string) -> return: ns0:listType
lists(topic: xsd:string, subtopic: xsd:string) -> listInfo: xsd:string
login(email: xsd:string, password: xsd:string) -> return: xsd:string
review(list: xsd:string) -> return: ns0:ArrayOfString
signoff(list: xsd:string, email: xsd:string) -> return: xsd:boolean
subscribe(list: xsd:string, gecos: xsd:string) -> return: xsd:boolean
Edit 3
Похоже, что I am аутентифицируется в методе login
. Я прошел весь процесс. Запрос возвращает ответ статуса 200, но дальнейшая обработка возвращает значение None
. Ответ SOAP:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<loginResponse xmlns="urn:sympasoap">
<result xsi:type="xsd:string">9ff202249b103c67f6aa8a0612ed14a54c</result>
</loginResponse>
</soap:Body>
</soap:Envelope>
Затем я переключаю свое внимание на метод lists
. Я перехожу через это, и запрос возвращает 500 ответов. Ответ SOAP:
<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>User not authentified</faultstring>
<detail xsi:type="xsd:string">You should login first</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>