¿Qué bibliotecas de cliente SOAP existen para Python y dónde está la documentación para ellas? [cerrado]

333

Nunca he usado SOAP antes y soy algo nuevo en Python. Estoy haciendo esto para familiarizarme con ambas tecnologías. He instalado SOAPlib y he intentado leer la documentación de su Cliente , pero no lo entiendo demasiado bien. ¿Hay algo más que pueda investigar que sea más adecuado para ser una biblioteca SOAP Client para Python?

Editar: en caso de que ayude, estoy usando Python 2.6.

damon
fuente
1
¿ Tiene que ser SOAP, como el uso de servicios web preexistentes? El xmlrpclib de Python es muy simple de usar y he migrado nuestros servicios SOAP a XMLRPC con él.
Kirk Strauser
26
A veces, uno solo quiere conectarse al servicio que SOLO se proporciona a través de SOAP, así que sí, una buena lib de SOAP de python es algo que tarde o temprano necesitará. Uno no va a tener alguna posibilidad de convencer proveedor de servicios para reemplazar SOAP con algo "más limpia" ...
rombarcz
34
¿Alguien puede proporcionar una actualización relevante en 2011? Aparentemente, nadie puede volver a hacer esta pregunta.
Marcin
1
FYI: abrí una publicación similar que apunta SOAP para Python 3 : stackoverflow.com/questions/7817303/…
gecco
55
Cualquier persona que visite esta pregunta, vote para volver a abrirla para que la información pueda permanecer actualizada / se pueden publicar nuevas respuestas.
ocodo

Respuestas:

388

Actualización (2016):

Si solo necesita un cliente SOAP, hay una biblioteca bien mantenida llamada zeep . Es compatible con Python 2 y 3 :)


Actualizar:

Además de lo mencionado anteriormente, me referiré a la página de Python WebServices que siempre está actualizada con todos los módulos recomendados y mantenidos activamente para SOAP y todos los demás tipos de servicios web.


Desafortunadamente, por el momento, no creo que haya una "mejor" biblioteca de Python SOAP. Cada uno de los principales disponibles tiene sus propios pros y contras.

Bibliotecas más antiguas:

  • SOAPy : Fue el "mejor", pero ya no se mantuvo. No funciona en Python 2.5+

  • ZSI : muy doloroso de usar, y el desarrollo es lento. Tiene un módulo llamado "SOAPpy", que es diferente de SOAPy (arriba).

Bibliotecas "más nuevas":

  • SUDS : Muy Pythonic, y fácil de crear clientes SOAP que consumen WSDL. Crear servidores SOAP es un poco más difícil. (Este paquete no funciona con Python3. Para Python3 ver SUDS-py3)

  • SUDS-py3 : la versión Python3 de SUDS

  • Spyne : Crear servidores es fácil, crear clientes es un poco más desafiante. Falta algo de documentación.

  • ladon : Crear servidores es muy parecido a soaplib (usando un decorador). Ladon expone más interfaces que SOAP al mismo tiempo sin necesidad de código de usuario adicional.

  • pysimplesoap : muy ligero pero útil tanto para el cliente como para el servidor; incluye una integración de servidor web2py que se incluye con web2py.

  • SOAPpy : a diferencia del SOAPpy abandonado que está alojado en el enlace ZSI anterior, esta versión se mantuvo en realidad hasta 2011, ahora parece estar abandonada también.
  • soaplib : biblioteca python fácil de usar para escribir y llamar a los servicios web de soap. Los servicios web escritos con soaplib son simples, livianos, funcionan bien con otras implementaciones SOAP y pueden implementarse como aplicaciones WSGI.
  • osa : una biblioteca de cliente SOAP python rápida / delgada fácil de usar.

De lo anterior, solo he usado SUDS personalmente, y me gustó mucho.

Samat Jain
fuente
2
SOAPy y SOAPpy son realmente diferentes. He editado para aclarar y convertí la publicación en una wiki comunitaria.
Samat Jain
17
+1 para SUDS, ¡gran biblioteca! Me encontré con problemas al usar SUDS con los servicios web HTTPS detrás de un proxy. Resulta que es un urllib2problema conocido de Python . Vea mi respuesta para más detalles.
sstock
44
Probé SUD, pero entró en un bucle infinito al abrir un WSDL; entonces Python arrojó un error de límite de recursión. Encontré este boleto abierto con respecto al problema: fedorahosted.org/suds/ticket/239 Aparentemente, este fue un error de biblioteca que se rompió hace 3 años, y aún no se ha solucionado.
Botones840
11
Hay una bifurcación mantenida de SUDS en bitbucket.org/jurko/suds
Sjaak Trekhaak
1
Hoy comencé a usar SUDS para obtener datos solamente. Manejó una autenticación básica de apikey en los encabezados de jabón sin ningún problema, y ​​las respuestas fueron bastante fáciles de analizar. La documentación también era hada decente.
sacarina
47

Seguí el consejo de otras respuestas a esta pregunta y probé SUDS . Después de usarlo "con ira", debo estar de acuerdo: ¡SUDS es muy agradable! ¡Muy recomendable!

Tuve problemas para llamar a los servicios web basados ​​en HTTPS desde detrás de un proxy. Al momento de escribir esto, esto afecta a todos los clientes de servicios web de Python que usan urllib2, por lo que documentaré la solución aquí.

El urllib2módulo que se envía con python 2.6.2 y versiones posteriores no emitirá un CONNECTproxy para las sesiones HTTPS-over-HTTP-proxy. Esto da como resultado un tiempo de espera prolongado o, si tiene suerte, un error similar al siguiente:

abort: error: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Este fue el problema 1424152 en el rastreador de errores de Python. Hay parches adjuntos al informe de errores que solucionarán esto en Python 2.xy Python 3.x. El problema ya está solucionado .

sstock
fuente
Lo acabo de instalar y, aunque soy totalmente nuevo en Python, me pareció muy intuitivo y pude enviar solicitudes SUDS en cuestión de minutos. ¡La biblioteca es genial!
Leonid
1
¿Te importa actualizar este? Pregunto porque hice clic en el enlace y se solucionó el error.
tshepang
3
Es una pena que ya no se mantenga
Paul
Para nosotros, la espuma también funciona bien. Sin embargo, es muy lenta. ¡Recuperar un archivo de jabón xml lleva 0,5 segundos, y procesarlo lleva 5 segundos en una máquina de doble núcleo!
TjerkW
1
@paulm: prueba bitbucket.org/jurko/suds
johndodo
19

Tuve buena experiencia con SUDS https://fedorahosted.org/suds

Usó su TestSuite como documentación.

Rajesh
fuente
1
¡SUDS es increíble! realmente fácil de usar, buenos documentos, ¡cosas geniales!
Sander Versluys
1
Horquilla mantenida, compatible con python3: suds-jurko . pip install suds-jurko
laffuste
Estoy tratando de llamar a la API de jabón asíncrono con espuma, funciona bien pero no obtengo ninguna respuesta, ¿alguien puede ayudarme en eso? stackoverflow.com/questions/39227719/...
Vikram Singh Chandel
10

SUDS es el camino a seguir, no hay duda al respecto.

Peter Mortensen
fuente
55
Y también falla en una gran cantidad de archivos WSDL. Para respaldar esa afirmación, por ejemplo, las API de mapas de Bing, algunos de estos fallan y la espuma no puede analizarlos.
3
Encontré que SUDS admite puntos finales SSL.
leonigmig
6

SUDS es fácil de usar, pero no se garantiza que sea reentrante. Si mantiene el objeto WSDL Client () en una aplicación con subprocesos para un mejor rendimiento, hay algunos riesgos involucrados. La solución a este riesgo, el método clone (), arroja el error irrecuperable Python 5508, que parece imprimirse pero en realidad no arroja una excepción. Puede ser confuso, pero funciona. Sigue siendo, con mucho, el mejor cliente de Python SOAP.


fuente
4

Lanzamos una nueva biblioteca: PySimpleSOAP , que brinda soporte para un cliente / servidor simple y funcional. Sus objetivos son: facilidad de uso y flexibilidad (no se requieren clases, código autogenerado o xml), introspección y generación WSDL, cumplimiento estándar WS-I, compatibilidad (incluyendo Java AXIS, .NET y Jboss WS). Se incluye en Web2Py para habilitar soluciones de pila completa (que complementan otros protocolos compatibles como XML_RPC, JSON, AMF-RPC, etc.).

Si alguien está aprendiendo SOAP o quiere investigarlo, creo que es una buena opción para comenzar.

Reingart
fuente
2

Creo que soaplib ha desaprobado a su cliente SOAP ('remitente') en favor de la espuma. En este punto, soaplib se centra en ser un servidor SOAP agnóstico de marco web ('receptor'). Actualmente, soaplib se encuentra en desarrollo activo y generalmente se trata en la lista de correo Python SOAP:

http://mail.python.org/mailman/listinfo/soap

bradallen137
fuente
2

En mi conclusión tenemos esto:

Lado del cliente de jabón:

use solo Suds-jurko (actualizado 2016) la espuma está bien mantenida y actualizada.

ACTUALIZACIÓN 06/2017: la biblioteca suds-jurko no está actualizada y aparentemente abandonada ,

Probé zeep biblioteca, pero tengo limitaciones alrededor de fichas, por ahora sólo admite UsernameToken, puedo informar de un error al crear marca de tiempo de actualización de fichas y autor del código para solucionarlo.

Zeep comienza bien y tiene buena documentación , así que recientemente migré mi código de espuma a zeep y funciona bien.

Lado del servidor de jabón:

Tenemos el uso de TGWS, soaplib (pysimplesoap no probado) en mi humilde opinión y la ayuda de soaplib debe ser la elección.

Atentamente,

Cristian Salamea
fuente
¿Hay buena documentación / muestras para Suds-jurko? en el repositorio hay algunos archivos .rst pero no mucha documentación de cómo usar la biblioteca.
ierdna
1

Como sugerí aquí, le recomiendo que haga el suyo. En realidad no es tan difícil y sospecho que esa es la razón por la que no hay mejores bibliotecas Python SOAP.

Greg
fuente
1

La espuma es bastante buena. Intenté SOAPpy pero no pude que funcionara de la manera que necesitaba, mientras que la espuma funcionó casi de inmediato.

Pratik Patel
fuente
0

Habíamos usado SOAPpy de Python Web Services , pero parece que ZSI (misma fuente) lo está reemplazando.

Kirk Strauser
fuente
0

Estoy usando SOAPpy con Python 2.5.3 en una configuración de producción.

Tuve que editar manualmente un par de archivos en SOAPpy (algo sobre el código del encabezado en el lugar incorrecto) pero aparte de eso funcionó y continúa haciéndolo de manera muy confiable.

carl
fuente
1
Hicimos lo mismo y estamos usando SOAPpy con Python 2.6.3.
Joe L.