2013-12-08 3 views
8

Я тестирую библиотеку SUDS, и я пытаюсь сделать простой запрос к конечной точке, но получаю необычный вывод. Зачем?Python: Выполнение запроса с помощью 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) 
+0

Вы должны перефразировать вопрос «Я ищу использовать Suds с определенной конечной точкой, но я не знаю WSDL» – Wyrmwood

ответ

6

Вы не можете использовать пены для этого сервиса, пена основана на 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>[email protected]</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

+0

Я думаю, что это только для поиска информации? Можете ли вы отправить материал, используя это? – chuckfinley

+0

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

1

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

+0

У меня уже есть учетная запись и пароль – chuckfinley

+0

вы должны подать заявки на эту конечную точку http://xmlgw.companieshouse.gov.uk/v1-0/xmlgw/Gateway –

+0

Я обновил код и предоставил вывод – chuckfinley

2

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

Из документа мыльной пены «Вам нужно будет знать 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() 

Выходы тонну данных.

+0

Где я могу его найти? Ознакомьтесь с этими ссылками: http://xmlgw.companieshouse.gov.uk/SchemaStatus http://xmlgw.companieshouse.gov.uk/msgenv.html – chuckfinley

+0

Вы хотите проверить SUDS (как заявляет ваш вопрос) или сделать вы хотите проверить услуги на этом веб-сайте? Я думаю, что последнее не является вопросом для этого форума, скорее для кого-то на веб-сайте. – Wyrmwood

+0

«Ищите полный пример того, как сделать запрос». - Как это непонятно? – chuckfinley

2

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

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

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 
Смежные вопросы