Quiero usar un servicio web basado en SOAP WSDL en Python. He mirado el código Dive Into Python pero el módulo SOAPpy no funciona en Python 2.5.
He intentado usar suds que funciona en parte, pero rompe con ciertos tipos (suds.TypeNotFound: Type not found: 'item').
También he mirado al Cliente, pero esto no parece admitir WSDL.
Y he mirado a ZSI pero parece muy complejo. ¿Alguien tiene algún código de muestra?
El WSDL es https://ws.pingdom.com/soap/PingdomAPI.wsdl y funciona bien con el cliente PHP 5 SOAP.
python
web-services
soap
davidmytton
fuente
fuente
Respuestas:
Te recomendaría que eches un vistazo a SUDS
"Suds es un cliente ligero de python SOAP para consumir servicios web".
fuente
Hay una biblioteca relativamente nueva que es muy prometedora y, aunque todavía está mal documentada, parece muy limpia y pitónica: python zeep .
Vea también esta respuesta para un ejemplo.
fuente
Recientemente me topé con el mismo problema. Aquí está la sinopsis de mi solución:
Se necesitan bloques de código constituyente básicos
Los siguientes son los bloques de código básicos necesarios de su aplicación cliente
¿Qué módulos necesitas?
Muchos sugirieron usar módulos de Python como urllib2; sin embargo, ninguno de los módulos funciona, al menos para este proyecto en particular.
Entonces, aquí está la lista de los módulos que necesita obtener. En primer lugar, debe descargar e instalar la última versión de espuma desde el siguiente enlace:
Además, debe descargar e instalar solicitudes y módulos de suds_requests desde los siguientes enlaces respectivamente (descargo de responsabilidad: soy nuevo para publicar aquí, por lo que no puedo publicar más de un enlace por ahora).
Una vez que descargue e instale con éxito estos módulos, está listo para comenzar.
El código
Siguiendo los pasos descritos anteriormente, el código tiene el siguiente aspecto: Importaciones:
Solicitud de sesión y autenticación:
Crea el cliente:
Agregar encabezado WS-Security:
Tenga en cuenta que este método crea el encabezado de seguridad representado en la Fig.1. Por lo tanto, su implementación puede variar según el formato de encabezado de seguridad correcto proporcionado por el propietario del servicio que está consumiendo.
Consuma el método (u operación) relevante:
Registro :
Una de las mejores prácticas en implementaciones como esta es iniciar sesión para ver cómo se ejecuta la comunicación. En caso de que haya algún problema, facilita la depuración. El siguiente código hace un registro básico. Sin embargo, puede registrar muchos aspectos de la comunicación además de los que se muestran en el código.
Resultado:
Aquí está el resultado en mi caso. Tenga en cuenta que el servidor devolvió HTTP 200. Este es el código de éxito estándar para la solicitud-respuesta HTTP.
fuente
suds_request
fallará durante la instalación, por lo que si está utilizandosuds-jurko
fork, puede instalar elsuds_request
que fue adaptado para funcionar con la versión de espuma de jurko:pip install git+https://github.com/chrcoe/suds_requests.git@feature/python3_suds_jurko
En este momento (a partir de 2008), todas las bibliotecas SOAP disponibles para Python apestan. Recomiendo evitar SOAP si es posible. La última vez que nos vimos obligados a usar un servicio web SOAP de Python, escribimos un contenedor en C # que manejaba el SOAP por un lado y hablaba COM por el otro.
fuente
Zeep es una biblioteca SOAP decente para Python que coincide con lo que está pidiendo: http://docs.python-zeep.org
fuente
Periódicamente busco una respuesta satisfactoria a esto, pero hasta ahora no he tenido suerte. Yo uso soapUI + solicitudes + trabajo manual.
Me di por vencido y usé Java la última vez que necesitaba hacer esto, y simplemente me rendí varias veces la última vez que quise hacerlo, pero no fue esencial.
Habiendo utilizado con éxito la biblioteca de solicitudes el año pasado con la API RESTful de Project Place, se me ocurrió que tal vez podría simplemente transferir manualmente las solicitudes SOAP que quiero enviar de una manera similar.
Resulta que no es demasiado difícil, pero lleva mucho tiempo y es propenso a errores, especialmente si los campos tienen un nombre inconsistente (en el que estoy trabajando actualmente tiene 'jobId', JobId 'y' JobID '. Utilizo soapUI para cargar WSDL para facilitar la extracción de puntos finales, etc. y realizar algunas pruebas manuales. Hasta ahora he tenido la suerte de no haber sido afectado por los cambios en cualquier WSDL que estoy usando.
fuente
No es cierto SOAPpy no funciona con Python 2.5, funciona, aunque es muy simple y muy, muy básico. Si desea hablar con un servicio web más complicado, ZSI es su único amigo.
La demostración realmente útil que encontré está en http://www.ebi.ac.uk/Tools/webservices/tutorials/python ; esto realmente me ayudó a comprender cómo funciona ZSI.
fuente
Si está rodando el suyo, le recomiendo que consulte http://effbot.org/zone/element-soap.htm .
fuente
SOAPpy ahora está obsoleto, AFAIK, reemplazado por ZSL. Es un punto discutible, porque no puedo hacer que ninguno funcione, mucho menos compilar, en Python 2.5 o Python 2.6
fuente
fuente