Python: создание запроса с помощью suds

Я тестирую библиотеку SUDS, и я пытаюсь сделать простой запрос к конечной точке, но я получаю необычный результат. Почему?

from suds.client import Client
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)

url = "http://xmlgw.companieshouse.gov.uk/v1-0/xmlgw/Gateway"

client = Client(url)
print client

выход:

Martynass-MacBook-Air:CH martynas$ python ch.py
DEBUG:suds.xsd.schema:loaded:

schema collection
   Schema:0x109a7db90
   (raw)
      <schema/>
   (model)

DEBUG:suds.xsd.schema:MERGED:
Schema:0x109a7db90
(raw)
   <schema/>
(model)

4 ответов


вы не можете использовать suds для этого servce, suds основан на SOAP, который является другим протоколом веб-службы. Вы можете отправить xml-запрос и получить ответ.

import requests

target_url = "http://xmlgw.companieshouse.gov.uk/v1-0/xmlgw/Gateway"
headers={'Content-type': 'text/xml'}
print requests.post(target_url, data=xml, headers=headers).text

где XML определяется в соответствии с их схемами. http://xmlgw.companieshouse.gov.uk/example_http.html Это один examaple

xml = ('''
<GovTalkMessage xmlns="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader" 
xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" 
xmlns:gt="http://www.govtalk.gov.uk/schemas/govtalk/core" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.govtalk.gov.uk/schemas/govtalk/govtalkheader">
<EnvelopeVersion>1.0</EnvelopeVersion>
<Header>
<MessageDetails>
<Class>CompanyDetails</Class>
<Qualifier>request</Qualifier>
<TransactionID>14456553</TransactionID>
</MessageDetails>
<SenderDetails>
<IDAuthentication>
<SenderID>My_SenderID</SenderID>
<Authentication>
<Method>CHMD5</Method>
<Value>e999e113407884fa410fa2f53bc23952</Value>
</Authentication>
</IDAuthentication>
<EmailAddress>sometest@some.email.address</EmailAddress>
</SenderDetails>
</Header>
<GovTalkDetails>
<Keys/>
</GovTalkDetails>
<Body>
<CompanyDetailsRequest xmlns="http://xmlgw.companieshouse.gov.uk/v1-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://xmlgw.companieshouse.gov.uk/v1-0/schema/CoDets.xsd">
<CompanyNumber>01002361</CompanyNumber>
<GiveMortTotals>1</GiveMortTotals>
</CompanyDetailsRequest>
</Body>
</GovTalkMessage>
''')

<Class>CompanyDetails</Class> какую информацию вы получаете. какая "функция" для вызова

<Authentication>
<Method>CHMD5</Method>
<Value>e999e113407884fa410fa2f53bc23952</Value>
</Authentication>
</IDAuthentication>
Здесь вы укажете логин информация я думаю

<CompanyDetailsRequest xmlns="http://xmlgw.companieshouse.gov.uk/v1-0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlgw.companieshouse.gov.uk/v1-0/schema/CoDets.xsd"> <CompanyNumber>01002361</CompanyNumber> <GiveMortTotals>1</GiveMortTotals> </CompanyDetailsRequest> Вызов "функции", и это параметры

теперь это даст мне ответ, говорящий мне, что авторизация не удалась. Поэтому, если у вас есть учетная запись, это должно сработать для вас.

вы можете найти список схем, которые они имеют для различных типов запросов. Некоторые из них имеют запрос образца, чтобы помочь вам. http://xmlgw.companieshouse.gov.uk/v1-0/xmlgw/SchemaStatusOutput

вот полное руководство все их планы. http://xmlgw.companieshouse.gov.uk/data_usage_guide_dec_2013.pdf


для этого сайта нет определений wsdl. Попробуйте что-то вроде http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL для вашего url тогда вы можете попробовать что-то вроде клиент.услуга.GetWeatherInformation ()

из документа suds "вам нужно будет знать url для WSDL для каждой используемой службы."

явный пример

from suds.client import Client
import logging
logging.basicConfig(level=logging.INFO)
logging.getLogger('suds.xsd.schema').setLevel(logging.DEBUG)

url = " http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL"

client = Client(url)
client.service.GetWeatherInformation()

выводит кучу данных.


Suds не позволяет легко обнаружить службу, лучше сначала протестировать бит с soapui или создать читаемый человеком документ wsdl с помощью этого xslt:http://code.google.com/p/wsdl-viewer/ . Таким образом, вы знаете структуру запросов и ответов и какие услуги доступны.

запросы и ответы в soap являются XML-деревьями, поэтому, как только вы получите результат, вам нужно получить доступ к содержимому XML-тега, содержащего интересующую вас информацию. Вот пример, который должен работать ( у меня нет имени, но результат.Статус.Успех работает ).

import suds

client = suds.client.Client("http://webservices.data-8.co.uk/companieshouse.asmx?WSDL")
result = client.service.GetCompanyDetails("username", "password", 1234)
print result.Status.Success
print result.Result.CompanyName

вы не можете сделать запрос против .XSD-файл. XSD-это определение обмениваемого сообщения. Вы должны сделать запрос на веб-сайте знакомств здесь вы можете найти дополнительную информацию об этой веб-службе. Но также есть страница ценообразования, указывающая, что вы должны заплатить, чтобы использовать свой сервис. Вероятно, когда вы платите, вы получите имя пользователя и пароль для аутентификации с помощью сервиса.