jurko example consumir python soap suds

example - python suds jurko timeout



Python: hacer una solicitud con espuma (4)

Estoy probando la biblioteca SUDS y estoy tratando de hacer una simple solicitud a un punto final, pero obtengo resultados inusuales. ¿Por qué?

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

Salida:

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)


No hay definiciones wsdl para ese sitio. Pruebe algo como http://wsf.cdyne.com/WeatherWS/Weather.asmx?WSDL para su url, entonces puede probar algo como client.service.GetWeatherInformation ()

Del documento de espuma, "Necesitarás saber la URL de WSDL para cada servicio utilizado".

Un ejemplo explícito

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()

Emite una tonelada de datos.


No puede realizar una solicitud contra .xsd. XSD es la definición del mensaje intercambiado. Debe realizar una solicitud en contra del servicio web. Aquí puede encontrar más información sobre ese servicio web. Pero también hay una página de precios que indica que debe pagar para usar su servicio. Probablemente cuando pague obtendrá el nombre de usuario y la contraseña para autenticarse con el servicio.


No puede usar espuma para este servicio, la espuma se basa en SOAP, que es otro protocolo de servicio web. Lo que puede hacer es enviar una solicitud xml y obtener una respuesta.

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

Donde el xml se define de acuerdo con sus esquemas. http://xmlgw.companieshouse.gov.uk/example_http.html Este es un ejemplo

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> Qué tipo de información está obteniendo. un poco a qué "función" llamar

<Authentication>
<Method>CHMD5</Method>
<Value>e999e113407884fa410fa2f53bc23952</Value>
</Authentication>
</IDAuthentication>
<Authentication>
<Method>CHMD5</Method>
<Value>e999e113407884fa410fa2f53bc23952</Value>
</Authentication>
</IDAuthentication>
Aquí pondría la información de inicio de sesión, supongo

<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> La llamada a la" función "y sus parámetros

Ahora esto me dará una respuesta diciéndome que la autorización falló. Entonces, si tienes una cuenta allí, esto debería funcionar para ti.

Aquí puede encontrar la lista de esquemas que tienen para diferentes tipos de solicitudes. Algunos de ellos tienen una solicitud de muestra para ayudarte. http://xmlgw.companieshouse.gov.uk/v1-0/xmlgw/SchemaStatusOutput

Aquí está la guía completa de todos sus esquemas. http://xmlgw.companieshouse.gov.uk/data_usage_guide_dec_2013.pdf


Suds no hace que sea fácil descubrir el servicio, es mejor probar primero con soapui o generar un documento legible por humanos del wsdl con este xslt: http://code.google.com/p/wsdl-viewer/ . Entonces, conoce la estructura de las solicitudes y respuestas, y qué servicios están disponibles.

Las solicitudes y respuestas en soap son árboles xml, por lo que una vez que obtiene el resultado, necesita acceder al contenido de la etiqueta xml que contiene la información que le interesa. Aquí hay un ejemplo que debería funcionar (no tengo un nombre de usuario, pero el resultado. El estado funciona bien).

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