Форум сайта python.su
Всем здравствуйте.
Есть скрипт на php который через сервис soap получает определённые данные, этот скрипт я писал несколько лет назад, решил в целях знакомства с python и ускорения работы переписать его.
Выбрал Zeep для python3.6
и, собственно, простой запрос:
from zeep import Client client = Client('http://192.168.1.100/Client.asmx?WSDL', strict=False) result = client.service.GetData()
from zeep import Client client = Client('http://192.168.1.100/Client.asmx?WSDL', strict=False) with client.options(raw_response=True): result = client.service.GetData()
Офлайн
Через Wireshark сравни, что посылает скрипт на PHP и скрипт на питоне.
Офлайн
py.user.nextтак я вижу, что данные мне приходят, я писал в стартовом сообщении это, но, такое ощущение что zeep их НЕ разбирает и не показывает мне. А если я включаю опцию raw_response=True то мне всё отображается.
Через Wireshark сравни, что посылает скрипт на PHP и скрипт на питоне.
from zeep import Client from datetime import datetime, timedelta from pprint import pprint cl = Client("http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?wsdl") # test 1 (GetLatestDate возвращает: <GetLatestDateResult>string</GetLatestDateResult> ) result = cl.service.GetLatestDate() print(result) # выводит 20180209 # test 2 (GetLatestDate возвращает: <GetLatestDateResult>string</GetLatestDateResult> c опцией raw_response with cl.options(raw_response=True): result = cl.service.GetLatestDate() pprint(result.text) # test 3 (Ruonia возвращает: <xsd:schema>schema</xsd:schema>xml</RuoniaResult> start = datetime.now() - timedelta(days=30) end = datetime.now() result = cl.service.Ruonia(start,end) print(result) # test 3 (Ruonia возвращает: <xsd:schema>schema</xsd:schema>xml</RuoniaResult> c опцией raw_response with cl.options(raw_response=True): result = cl.service.Ruonia(start,end) pprint(result.text)
('<?xml version="1.0" encoding="utf-8"?><soap:Envelope ' 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ' 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' 'xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><GetLatestDateResponse ' 'xmlns="http://web.cbr.ru/"><GetLatestDateResult>20180209</GetLatestDateResult></GetLatestDateResponse></soap:Body></soap:Envelope>')
{ 'schema': <Schema(location=None, tns=None)>, '_value_1': <Element {urn:schemas-microsoft-com:xml-diffgram-v1}diffgram at 0x3433418> }
('<?xml version="1.0" encoding="utf-8"?><soap:Envelope ' 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ' 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' 'xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><RuoniaResponse ' 'xmlns="http://web.cbr.ru/"><RuoniaResult><xs:schema id="Ruonia" xmlns="" ' 'xmlns:xs="http://www.w3.org/2001/XMLSchema" ' 'xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"><xs:element ' 'name="Ruonia" msdata:IsDataSet="true" ' 'msdata:UseCurrentLocale="true"><xs:complexType><xs:choice minOccurs="0" ' 'maxOccurs="unbounded"><xs:element ' 'name="ro"><xs:complexType><xs:sequence><xs:element name="D0" ' 'msdata:Caption="Дата" type="xs:dateTime" minOccurs="0" /><xs:element ' 'name="ruo" msdata:Caption="Ставка, %" type="xs:decimal" minOccurs="0" ' '/><xs:element name="vol" msdata:Caption="Объем сделок,по которым произведен ' 'расчет ставки RUONIA, млрд. руб." type="xs:decimal" minOccurs="0" ' '/></xs:sequence></xs:complexType></xs:element></xs:choice></xs:complexType></xs:element></xs:schema><diffgr:diffgram ' 'xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" ' 'xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><Ruonia ' 'xmlns=""><ro diffgr:id="ro1" ' 'msdata:rowOrder="0"><D0>2018-01-10T00:00:00+03:00</D0><ruo>7.1600</ruo><vol>151.1200</vol></ro><ro ' 'diffgr:id="ro2" ' 'msdata:rowOrder="1"><D0>2018-01-11T00:00:00+03:00</D0><ruo>7.0400</ruo><vol>157.4100</vol></ro><ro ' 'diffgr:id="ro3" ' 'msdata:rowOrder="2"><D0>2018-01-12T00:00:00+03:00</D0><ruo>7.0000</ruo><vol>162.7000</vol></ro><ro ' 'diffgr:id="ro4" ' 'msdata:rowOrder="3"><D0>2018-01-15T00:00:00+03:00</D0><ruo>7.0000</ruo><vol>141.1800</vol></ro><ro ' 'diffgr:id="ro5" ' 'msdata:rowOrder="4"><D0>2018-01-16T00:00:00+03:00</D0><ruo>7.0200</ruo><vol>172.0400</vol></ro><ro ' 'diffgr:id="ro6" ' 'msdata:rowOrder="5"><D0>2018-01-17T00:00:00+03:00</D0><ruo>6.9800</ruo><vol>159.9800</vol></ro><ro ' 'diffgr:id="ro7" ' 'msdata:rowOrder="6"><D0>2018-01-18T00:00:00+03:00</D0><ruo>7.0700</ruo><vol>142.0500</vol></ro><ro ' 'diffgr:id="ro8" ' 'msdata:rowOrder="7"><D0>2018-01-19T00:00:00+03:00</D0><ruo>7.0100</ruo><vol>176.5600</vol></ro><ro ' 'diffgr:id="ro9" ' 'msdata:rowOrder="8"><D0>2018-01-22T00:00:00+03:00</D0><ruo>7.0100</ruo><vol>172.2000</vol></ro><ro ' 'diffgr:id="ro10" ' 'msdata:rowOrder="9"><D0>2018-01-23T00:00:00+03:00</D0><ruo>6.9500</ruo><vol>214.0000</vol></ro><ro ' 'diffgr:id="ro11" ' 'msdata:rowOrder="10"><D0>2018-01-24T00:00:00+03:00</D0><ruo>6.9300</ruo><vol>227.0700</vol></ro><ro ' 'diffgr:id="ro12" ' 'msdata:rowOrder="11"><D0>2018-01-25T00:00:00+03:00</D0><ruo>7.2100</ruo><vol>248.8700</vol></ro><ro ' 'diffgr:id="ro13" ' 'msdata:rowOrder="12"><D0>2018-01-26T00:00:00+03:00</D0><ruo>7.2500</ruo><vol>201.9400</vol></ro><ro ' 'diffgr:id="ro14" ' 'msdata:rowOrder="13"><D0>2018-01-29T00:00:00+03:00</D0><ruo>7.3500</ruo><vol>144.7300</vol></ro><ro ' 'diffgr:id="ro15" ' 'msdata:rowOrder="14"><D0>2018-01-30T00:00:00+03:00</D0><ruo>7.3700</ruo><vol>193.1800</vol></ro><ro ' 'diffgr:id="ro16" ' 'msdata:rowOrder="15"><D0>2018-01-31T00:00:00+03:00</D0><ruo>7.1200</ruo><vol>148.3900</vol></ro><ro ' 'diffgr:id="ro17" ' 'msdata:rowOrder="16"><D0>2018-02-01T00:00:00+03:00</D0><ruo>7.2600</ruo><vol>118.3500</vol></ro><ro ' 'diffgr:id="ro18" ' 'msdata:rowOrder="17"><D0>2018-02-02T00:00:00+03:00</D0><ruo>7.0900</ruo><vol>127.5000</vol></ro><ro ' 'diffgr:id="ro19" ' 'msdata:rowOrder="18"><D0>2018-02-05T00:00:00+03:00</D0><ruo>7.1900</ruo><vol>134.5300</vol></ro><ro ' 'diffgr:id="ro20" ' 'msdata:rowOrder="19"><D0>2018-02-06T00:00:00+03:00</D0><ruo>7.2300</ruo><vol>102.0000</vol></ro><ro ' 'diffgr:id="ro21" ' 'msdata:rowOrder="20"><D0>2018-02-07T00:00:00+03:00</D0><ruo>7.0700</ruo><vol>159.2000</vol></ro></Ruonia></diffgr:diffgram></RuoniaResult></RuoniaResponse></soap:Body></soap:Envelope>')
Отредактировано CoLoR (Фев. 8, 2018 16:07:51)
Офлайн
CoLoRВыполни type(result) и результат сюда скопируй.- выполняется, никаких ошибок, всё ок, но в result нет нужных данных.from zeep import Client client = Client('http://192.168.1.100/Client.asmx?WSDL', strict=False) result = client.service.GetData()
Офлайн
py.user.next<class ‘zeep.objects.GetDataResult’>
Выполни type(result) и результат сюда скопируй.
Отредактировано CoLoR (Фев. 9, 2018 07:32:56)
Офлайн
Теперь
from zeep import Client client = Client('http://192.168.1.100/Client.asmx?WSDL', strict=False) result = client.service.GetData() dir(result)
help(result)
Офлайн
dir(result):
['_value_1', '_value_2', 'namespace', 'tableTypeName']
Help on GetDataResult object: class GetDataResult(zeep.xsd.valueobjects.CompoundValue) | Represents a data object for a specific xsd:complexType. | | Method resolution order: | GetDataResult | zeep.xsd.valueobjects.CompoundValue | builtins.object | | Methods inherited from zeep.xsd.valueobjects.CompoundValue: | | __contains__(self, key) | | __deepcopy__(self, memo) | | __delitem__(self, key) | | __dir__(self) | __dir__() -> list | default dir() implementation | | __eq__(self, other) | Return self==value. | | __getattribute__(self, key) | Return getattr(self, name). | | __getitem__(self, key) | | __init__(self, *args, **kwargs) | Initialize self. See help(type(self)) for accurate signature. | | __iter__(self) | | __json__(self) | | __len__(self) | | __reduce__(self) | helper for pickle | | __repr__(self) | Return repr(self). | | _... None
Офлайн
CoLoRТут не всё, надо промотать вниз ещё.
help(result):
list(result)
Офлайн
py.user.nextСорри, вот целиком:
Тут не всё, надо промотать вниз ещё.
Help on GetDataResult object: class GetDataResult(zeep.xsd.valueobjects.CompoundValue) | Represents a data object for a specific xsd:complexType. | | Method resolution order: | GetDataResult | zeep.xsd.valueobjects.CompoundValue | builtins.object | | Methods inherited from zeep.xsd.valueobjects.CompoundValue: | | __contains__(self, key) | | __deepcopy__(self, memo) | | __delitem__(self, key) | | __dir__(self) | __dir__() -> list | default dir() implementation | | __eq__(self, other) | Return self==value. | | __getattribute__(self, key) | Return getattr(self, name). | | __getitem__(self, key) | | __init__(self, *args, **kwargs) | Initialize self. See help(type(self)) for accurate signature. | | __iter__(self) | | __json__(self) | | __len__(self) | | __reduce__(self) | helper for pickle | | __repr__(self) | Return repr(self). | | __setattr__(self, key, value) | Implement setattr(self, name, value). | | __setitem__(self, key, value) | | ---------------------------------------------------------------------- | Data descriptors inherited from zeep.xsd.valueobjects.CompoundValue: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined) | | ---------------------------------------------------------------------- | Data and other attributes inherited from zeep.xsd.valueobjects.CompoundValue: | | __hash__ = None
['_value_1', '_value_2', 'namespace', 'tableTypeName']
Офлайн
Теперь
result._value_1 result._value_2
Офлайн