Question

J'ai une caméra et je suis en train de s'y connecter vis suds. Je l'ai essayé d'envoyer XML brut et ont trouvé que la seule chose qui empêche la mousse xml de travail est un espace de noms incorrect de l'enveloppe de savon.

L'espace de noms d'enveloppe est:

xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"

et je veux réécrire à:

xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope"

Pour ajouter un espace de noms en python je tente ce code:

message = Element('Element_name').addPrefix(p='SOAP-ENC', u='www.w3.org/ENC')

Mais quand je l'ajoute SOAP-ENV à l'espace de noms ne pas écrire comme il est dans les liaisons hardcoded de mousse. Est-il possible de remplacer ce dans suds?

Merci pour toute aide.

Était-ce utile?

La solution 2

J'ai réussi à obtenir ce travail, l'enveloppe de savon est codé en dur dans bindings.py qui est stocké dans suds.egg installé dans votre site-packages. J'ai changé l'adresse de l'enveloppe SOAP à http://www.w3.org/2003/05/soap-envelope. C'était compatible avec mon appareil photo. Je ne pouvais pas trouver une commande pour écraser cette enveloppe en mousse, donc je en dur codé à l'bindings.py.

Merci pour toute aide

Autres conseils

Je suis autour d'elle en remplaçant manuellement la variable suds.binding.envns dans le module bindings:

from suds.bindings import binding
binding.envns=('SOAP-ENV', 'http://www.w3.org/2003/05/soap-envelope')

A partir de là, tout va bien (avec my service, c'est)

Mise à jour manuelle binding.py est certainement pas la bonne façon d'aller. Vous devriez être en mesure d'utiliser le ImportDoctor pour remplacer vos fixations par défaut. Jetez un oeil à la documentation fixation des schémas cassés sur le site Suds.

En outre, quelles versions de Python et suds utilisez-vous?

from suds.client import Client
from suds.plugin import MessagePlugin

WSDL_url = "my_url?wsdl"

class MyPlugin(MessagePlugin):
    def marshalled(self, context):
        #print(str(context.envelope))
        context.envelope.nsprefixes['SOAP-ENV']='myText'

client = Client(WSDL_url, plugins=[MyPlugin()])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top