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>
Aquí pondría la información de inicio de sesión, supongo
<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>
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