2017-06-28 3 views
0

Je ne peux pas authentifier l'utilisateur dans le client python Zeep pour API SOAP. J'ai deux urls:Comment appeler api de savon sans wsdl (mode non-wsdl) en python zeep? Appel emplacement URL avec l'utilisateur et mot de passe d'authentification

1) http://credotrade.stg-tradingcrm.com:8093/mex - elle précise les services wsdl. Je peux l'appeler avec Zeep commande python -mzeep pour vérifier toutes les opérations disponibles.

2) https://credotrade.stg-tradingcrm.com:8094/CrmServiceBasic - ceci est une URL d'authentification qui fournit un emplacement api sécurisé avec login et mot de passe.

examen client php travail disponible pour cette api je me suis dit que SoapClient paramètres recieves sous forme SoapClient($wsdl, $location, $username, $password)$wsdl est la première url, $location est le deuxième, et $username$password sont mon nom d'utilisateur et mot de passe. Suite à la documentation php

in non-WSDL mode, the location and uri options must be set, where location is the URL of the SOAP server to send the request to, and uri is the target namespace of the SOAP service

Si je l'appelle directement url wsdl je reçois erreur de sécurité: zeep.exceptions.Fault: An error occurred when verifying security for the message.

Sans aucun succès j'ai essayé de ctreate nouvel objet ServiceProxy. En outre, j'ai essayé de modifier l'initialisation Zeep Client self.wsdl dès que le code de wsdl definition semble indiquer l'emplacement de l'API.

Comment travailler avec api de savon non wsdl en python? Puis-je utiliser Zeep pour écrire un client qui appelle une API non wsdl?

Mise à jour: La documentation Php a semblé être trompeuse. Je cours dans la question How to create client with specific endpoints? à python-zeep github. Cela implique que l'URL de localisation est simplement une URL d'authentification qui n'a rien à voir avec le mode non-wsdl. L'auteur de Zeep suggère qu'il est possible de résoudre la question de l'url créer un nouvel authentification objet ServiceProxy:

service = client.create_service(
'{http://my-target-namespace-here}myBinding', 
'http://my-endpoint.com/acceptance/') 

Quelqu'un peut-il expliquer comment appeler url via create_service méthode d'authentification?

Répondre

0

Il est possible de créer le client de savon capable d'appeler URL d'authentification avec suds.

from suds.client import Client 

Client(
    url=<wsdl file path>, 
    location=<authentication url>, 
    username=user, 
    password=password 
)