7
votes

Écrase l'enveloppe de savon dans les suds python

J'ai une caméra et j'essaie de vous connecter à VIS SUDS. J'ai essayé d'envoyer un XML brut et j'ai constaté que la seule chose qui empêche le XML SUDS de travailler est un espace de noms d'enveloppe de savon incorrect.

L'espace de noms d'enveloppe est:

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

Et je veux la réécrire à:

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

Pour ajouter un espace de noms dans Python, j'essaie ce code:

message = élément ('ellement_name'). AddPrefix (p = 'SOAP-ENC', U = 'www.w3.org / enc')

mais quand j'ajoute le SOAP-ENV à l'espace de noms, il n'écrit pas car il est codé dans les liaisons SUDS. Y a-t-il un moyen de écraser cela dans SUDS?

Merci pour toute aide.


1 commentaires

Quel type d'erreur obtenez-vous? Pourriez-vous élaborer et publier votre code?


4 Réponses :


3
votes

J'ai réussi à obtenir ce travail, l'enveloppe SOAP est codée dur dans liants.py qui est stocké dans SUDS.EGG installé dans vos packages de site. J'ai changé l'adresse de l'enveloppe SOAP au http://www.w3.org/2003/05/soap-envelope . C'était compatible avec ma caméra. Je n'ai pas pu trouver une commande pour écraser cette enveloppe dans les suds, donc je l'ai codé dur dans les liaisons.py.

Merci pour toute aide


1 commentaires

Pour savoir comment entrer l'en-tête dans SUDS, vérifiez ma question précédente. Je posterai mon code comme je sais combien il y a peu de documentation.



1
votes

Mise à jour manuelle Binding.py n'est certainement pas la bonne façon d'y aller. Vous devriez pouvoir utiliser le importatdoctor pour remplacer vos liaisons par défaut. Regardez la documentation pour Fixation des schémas brisés sur le site Web SUDS.

Aussi, quelles versions de Python et Studs utilisez-vous?


0 commentaires

6
votes

je l'ai entouré en remplaçant manuellement le suds.binding.envns variable dans les reliures module: xxx

à partir de là , tout va bien (avec mon service , c'est-à-dire)


0 commentaires

0
votes
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()])

0 commentaires