python-soap-client-Bibliothek
Gibt es ein service im internet, ich möchte die Abfrage mit dem SOAP-Protokoll. Bei der Suche nach SOAP-Bibliotheken für Python, dieser Beitrag war informativ: https://stackoverflow.com/a/206964. Aber keiner der Bibliotheken, die ich habe versucht, arbeitete für diesen speziellen service. Ich habe ein PHP Skript, das funktioniert:
<?php
$client = new SoapClient('https://personyze.com/site/service/service/social_archive/', array('trace' => true));
$result = $client->__soapCall
( 'select', array
( array('server_id'=>123456, 'api_key'=>123456), 'user_id', null, null, false, 0, 1
)
);
echo $client->__getLastRequestHeaders(), $client->__getLastRequest(), "RESULT:\n";
var_dump($result);
Ich habe die folgenden versuche, das gleiche zu tun in Python:
1.
from suds.client import Client
client = Client("https://personyze.com/site/service/service/social_archive/")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/suds-0.3.7-py2.7.egg/suds/client.py", line 109, in __init__
self.wsdl = Definitions(url, options)
File "/usr/local/lib/python2.7/dist-packages/suds-0.3.7-py2.7.egg/suds/wsdl.py", line 194, in __init__
self.build_schema()
File "/usr/local/lib/python2.7/dist-packages/suds-0.3.7-py2.7.egg/suds/wsdl.py", line 255, in build_schema
self.schema = container.load()
File "/usr/local/lib/python2.7/dist-packages/suds-0.3.7-py2.7.egg/suds/xsd/schema.py", line 92, in load
child.dereference()
File "/usr/local/lib/python2.7/dist-packages/suds-0.3.7-py2.7.egg/suds/xsd/schema.py", line 295, in dereference
midx, deps = x.dependencies()
File "/usr/local/lib/python2.7/dist-packages/suds-0.3.7-py2.7.egg/suds/xsd/sxbasic.py", line 330, in dependencies
raise TypeNotFound(self.ref)
suds.TypeNotFound: Type not found: '(Array, http://schemas.xmlsoap.org/soap/encoding/, )'
2.
from pysimplesoap.client import SoapClient
client = SoapClient(wsdl="https://personyze.com/site/service/service/social_archive/", trace=True)
client.select({"server_id":123456, "api_key":123456}, "user_id")
Viel besser! Das beste Ergebnis für heute. Das einzige, was diese Bibliothek tut, falsch ist, dass es ruft die Methode selectRequest()
statt select()
.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pysimplesoap/client.py", line 140, in <lambda>
return lambda *args, **kwargs: self.wsdl_call(attr,*args,**kwargs)
File "/usr/local/lib/python2.7/dist-packages/pysimplesoap/client.py", line 289, in wsdl_call
response = self.call(method, *params)
File "/usr/local/lib/python2.7/dist-packages/pysimplesoap/client.py", line 188, in call
raise SoapFault(unicode(response.faultcode), unicode(response.faultstring))
pysimplesoap.client.SoapFault: SOAP-ENV:Server: Procedure 'selectRequest' not present
3.
import SOAPpy
client = SOAPpy.SOAPProxy("https://personyze.com/site/service/service/social_archive/", "urn:SocialArchiveServiceProviderwsdl")
client.select({"server_id":123456, "api_key":123456}, "user_id", None, None, False, 0, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/SOAPpy-0.12.6-py2.7.egg/SOAPpy/Client.py", line 540, in __call__
return self.__r_call(*args, **kw)
File "/usr/local/lib/python2.7/dist-packages/SOAPpy-0.12.6-py2.7.egg/SOAPpy/Client.py", line 562, in __r_call
self.__hd, self.__ma)
File "/usr/local/lib/python2.7/dist-packages/SOAPpy-0.12.6-py2.7.egg/SOAPpy/Client.py", line 464, in __call
p, attrs = parseSOAPRPC(r, attrs = 1)
File "/usr/local/lib/python2.7/dist-packages/SOAPpy-0.12.6-py2.7.egg/SOAPpy/Parser.py", line 1074, in parseSOAPRPC
t = _parseSOAP(xml_str, rules = rules)
File "/usr/local/lib/python2.7/dist-packages/SOAPpy-0.12.6-py2.7.egg/SOAPpy/Parser.py", line 1054, in _parseSOAP
parser.parse(inpsrc)
File "/usr/lib/python2.7/xml/sax/expatreader.py", line 107, in parse
xmlreader.IncrementalParser.parse(self, source)
File "/usr/lib/python2.7/xml/sax/xmlreader.py", line 123, in parse
self.feed(buffer)
File "/usr/lib/python2.7/xml/sax/expatreader.py", line 207, in feed
self._parser.Parse(data, isFinal)
File "/usr/lib/python2.7/xml/sax/expatreader.py", line 338, in start_element_ns
AttributesNSImpl(newattrs, qnames))
File "/usr/local/lib/python2.7/dist-packages/SOAPpy-0.12.6-py2.7.egg/SOAPpy/Parser.py", line 109, in startElementNS
"got `%s'" % toStr( name )
SOAPpy.Errors.Error: <Error : expected `SOAP-ENV:Envelope', got `wsdl:definitions'>
Bitte sagen Sie mir, was kann ich tun, damit es funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem server die WSDL-schema scheint kaputt zu sein - es verweist auf benannte Objekte, ohne Sie zu importieren.
Sehen die suds Dokumentation über die Festsetzung gebrochen schemas, wie zu umgehen, dass mit Seifenlauge.
Siehe auch diese Frage für mehr details.
Dies scheint für mich arbeiten: